PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Upsert грешка (On Conflict Do Update), сочеща към дублиращи се ограничени стойности

Проблемът се дължи на факта, че очевидно някои записи имат няколко автора. Така че вътрешното присъединяване в заявката за избор, която сте написали, ще върне множество редове за един и същ запис и INSERT ... ON CONFLICT не харесва това. Тъй като използвате само ReferenceAuthor таблица за филтриране, можете просто да пренапишете заявката, така че да използва тази таблица само за филтриране на записи, които нямат автор, като направите exists на корелирана подзаявка. Ето как:

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. Как да намерите къде се използва функцията

  2. Стъпки за отстраняване на неизправности django.db.utils.ProgrammingError:разрешението е отказано за релация django_migrations

  3. Нулиране на последователност в jpa

  4. Синтаксис на заявка за LEFT OUTER JOIN на PostgreSQL

  5. clojure.java.jdbc мързелива заявка