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

Lỗi nâng cấp (Khi xung đột Do cập nhật) trỏ đến các giá trị ràng buộc trùng lặp

Vấn đề là do thực tế là rõ ràng một số mục có nhiều tác giả. Vì vậy, phép nối bên trong trong truy vấn chọn mà bạn đã viết sẽ trả về nhiều hàng cho cùng một mục nhập và INSERT ... ON CONFLICT không thích điều đó. Vì bạn chỉ sử dụng ReferenceAuthor để lọc, bạn có thể chỉ cần viết lại truy vấn để nó sử dụng bảng đó để chỉ lọc các mục nhập không có bất kỳ tác giả nào bằng cách thực hiện exists trên một truy vấn con tương quan. Đây là cách thực hiện:

INSERT INTO new.bookmonographs  (citavi_id, abstract, createdon, edition, title, year)
SELECT "ID", "Abstract", "CreatedOn"::timestamp, "Edition", "Title", "Year"
FROM old."Reference"
WHERE old."Reference"."ReferenceType" = 'Book'
    AND old."Reference"."Year" IS NOT NULL
    AND old."Reference"."Title" IS NOT NULL
    AND exists(SELECT FROM old."ReferenceAuthor" WHERE old."ReferenceAuthor"."ReferenceID" = old."Reference"."ID")
    --Year, Title and Author must be present in the data, otherwise the entry is deemed useless, hence won't be included
ON CONFLICT (citavi_id) DO UPDATE 
    SET (abstract, createdon, edition, title, year) = (excluded.abstract, excluded.createdon, excluded.edition, excluded.title, excluded.year)
; 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bộ lọc truy vấn Django sử dụng mảng id lớn trong Postgres DB

  2. CHỌN * TỪ BẢNG MỚI tương đương trong Postgres

  3. Sự cố tự động tăng khóa chính PostgreSQL trong C ++

  4. Lưu trữ mảng đa chiều trong cơ sở dữ liệu:quan hệ hay đa chiều?

  5. Heroku - ActiveRecord ::StatementInvalid (PG ::Lỗi:ERROR:cột được yêu cầu không tồn tại