समस्या इस तथ्य के कारण है कि स्पष्ट रूप से कुछ प्रविष्टियों में कई लेखक हैं। तो आपके द्वारा लिखी गई चुनिंदा क्वेरी में आंतरिक जुड़ाव एक ही प्रविष्टि के लिए कई पंक्तियाँ लौटाएगा और 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)
;