PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Trả về dữ liệu từ lựa chọn con được sử dụng trong CHÈN trong Biểu thức Bảng Thông thường

Bạn cần đặt đúng tên bảng và bí danh của mình. Ngoài ra, kết nối giữa hai bảng là cột image (data trong bảng mới file_data ):

WITH inserted AS (
  INSERT INTO file_data (data)
  SELECT image
  FROM   task_log
  WHERE  image IS NOT NULL
  RETURNING id, data  -- can only reference target row
)
UPDATE task_log t
SET    attachment_id = i.id
     , attachment_type = 'INLINE_IMAGE'
FROM   inserted i
WHERE  t.image = i.data;

Giống như đã giải thích trong câu trả lời cũ của tôi mà bạn đã tham khảo, image phải là duy nhất trong task_log để điều này hoạt động:

Tôi đã thêm một kỹ thuật làm thế nào để phân biệt các giá trị không phải là duy nhất trong câu trả lời được tham chiếu. Không chắc liệu bạn có muốn các hình ảnh trùng lặp trong file_data hay không , mặc dù.

Trong RETURNING mệnh đề của một INSERT bạn chỉ có thể tham chiếu các cột từ hàng được chèn. Hướng dẫn sử dụng:

Nhấn mạnh đậm của tôi.

Gấp các giá trị nguồn trùng lặp

Nếu bạn muốn các mục nhập riêng biệt trong bảng đích của INSERT (task_log ), tất cả những gì bạn cần trong trường hợp này là DISTINCT trong SELECT ban đầu :

WITH inserted AS (
  INSERT INTO file_data (data)
  SELECT DISTINCT image  -- fold duplicates
  FROM   task_log
  WHERE  image IS NOT NULL
  RETURNING id, data  -- can only reference target row
)
UPDATE task_log t
SET    attachment_id = i.id
     , attachment_type = 'INLINE_IMAGE'
FROM   inserted i
WHERE  t.image = i.data;

file_data.id kết quả được sử dụng nhiều lần trong task_log . Lưu ý rằng nhiều hàng trong task_log bây giờ trỏ đến cùng một hình ảnh trong file_data . Cẩn thận với các bản cập nhật và xóa ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách đơn giản hóa một truy vấn chọn có chứa nhiều lựa chọn bên trong và tăng hiệu suất trong PostgreSQL

  2. Giới hạn tham gia vào một hàng

  3. Chuyển đổi CamelCase thành solid_case

  4. Múi giờ SQLAlchemy DateTime

  5. Làm thế nào để lấy id của hàng đã được chọn bởi hàm tổng hợp?