चूंकि null =null
गलत
. का मूल्यांकन करता है आपको यह जांचना होगा कि क्या दो फ़ील्ड दोनों null
हैं समानता जांच के अलावा:
UPDATE table_one SET table_one.x = table_two.y
FROM table_two
WHERE
(table_one.invoice_number = table_two.invoice_number
OR (table_one.invoice_number is null AND table_two.invoice_number is null))
AND
(table_one.submitted_by = table_two.submitted_by
OR (table_one.submitted_by is null AND table_two.submitted_by is null))
AND
-- etc
आप <कोड का भी उपयोग कर सकते हैं>मिश्रित फ़ंक्शन जो अधिक पठनीय है:
UPDATE table_one SET table_one.x = table_two.y
FROM table_two
WHERE
coalesce(table_one.invoice_number, '') = coalesce(table_two.invoice_number, '')
AND coalesce(table_one.submitted_by, '') = coalesce(table_two.submitted_by, '')
AND -- etc
लेकिन आपको डिफ़ॉल्ट मानों के बारे में सावधान रहने की आवश्यकता है (coalesce
. के लिए अंतिम तर्क ).
इसका डेटा प्रकार कॉलम प्रकार से मेल खाना चाहिए (ताकि आप उदाहरण के लिए तिथियों की तुलना संख्याओं से न करें) और डिफ़ॉल्ट ऐसा होना चाहिए कि यह डेटा में दिखाई न दे
उदा. coalesce(null, 1) =coalesce(1, 1)
ऐसी स्थिति है जिससे आप बचना चाहेंगे।
अपडेट (प्रदर्शन के संबंध में):
table_two पर Seq स्कैन
- इससे पता चलता है कि आपके पास table_two
. पर कोई अनुक्रमणिका नहीं है .
इसलिए यदि आप table_one
. में एक पंक्ति को अपडेट करते हैं फिर table_two
. में एक मेल खाने वाली पंक्ति खोजने के लिए डेटाबेस को मूल रूप से सभी पंक्तियों को एक-एक करके तब तक स्कैन करना होता है जब तक कि उसे एक मिलान नहीं मिल जाता।
यदि संबंधित कॉलम अनुक्रमित किए गए थे, तो मेल खाने वाली पंक्तियों को बहुत तेज़ी से पाया जा सकता है।
दूसरी तरफ अगर table_one
कोई अनुक्रमणिका है जो अद्यतन को धीमा कर देती है।
के अनुसार यह प्रदर्शन मार्गदर्शिका
:
उसी गाइड का एक और सुझाव जो मददगार हो सकता है:
तो उदाहरण के लिए यदि table_one
एक आईडी
कॉलम आप कुछ इस तरह जोड़ सकते हैं
and table_one.id between x and y
कहां
. तक हालत और क्वेरी को कई बार x
. के मानों को बदलते हुए चलाएँ और वाई
ताकि सभी पंक्तियों को कवर किया जा सके।
ANALYZE
. का उपयोग करते समय आप शायद सावधान रहना चाहें EXPLAIN
. के साथ विकल्प साइड इफेक्ट के साथ बयानों से निपटने के दौरान। दस्तावेज़ीकरण
के अनुसार :