PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL में किसी अन्य तालिका के कॉलम के साथ तालिका के कॉलम को अपडेट करें

आपका UPDATE क्वेरी इस तरह दिखनी चाहिए:

UPDATE table2 t2
SET    val2 = t1.val1
FROM   table1 t1
WHERE  t2.table2_id = t1.table2_id
AND    t2.val2 IS DISTINCT FROM t1.val1;  -- optional, see below

जिस तरह से आपके पास था, दो तालिकाओं की अलग-अलग पंक्तियों के बीच कोई लिंक नहीं था। प्रत्येक पंक्ति table1 . से प्राप्त की जाएगी table2 . में प्रत्येक पंक्ति के लिए . इसका कोई मतलब नहीं था (महंगे तरीके से) और सिंटैक्स त्रुटि को भी ट्रिगर किया, क्योंकि इस जगह में एक सबक्वेरी एक्सप्रेशन को केवल एक मान वापस करने की अनुमति है।

मैंने table2_id . पर दो तालिकाओं को जोड़कर इसे ठीक किया . उसे बदलें जो वास्तव में दोनों को जोड़ता है।

मैंने UPDATE को फिर से लिखा table1 . में शामिल होने के लिए (FROM . के साथ क्लॉज) सहसंबद्ध उपश्रेणियों को चलाने के बजाय, क्योंकि यह आमतौर पर परिमाण के क्रम से तेज़ होता है।
यह table2.val2 को भी रोकता है। जहां table1 . में कोई मेल खाने वाली पंक्ति नहीं मिलती है, वहां शून्य कर दिया जाएगा . इसके बजाय, कुछ नहीं क्वेरी के इस रूप के साथ ऐसी पंक्तियों के साथ होता है।

आप FROM में टेबल एक्सप्रेशन जोड़ सकते हैं एक सादे SELECT . की तरह सूची (टेबल, सबक्वेरी, सेट-रिटर्निंग फंक्शन, ...) मैनुअल:

from_list

तालिका अभिव्यक्तियों की एक सूची, अन्य तालिकाओं के स्तंभों को WHERE . में प्रदर्शित होने की अनुमति देती है स्थिति और अद्यतन अभिव्यक्तियाँ। यह उन तालिकाओं की सूची के समान है जिन्हें FROM . में निर्दिष्ट किया जा सकता है एक SELECT का खंड बयान। ध्यान दें कि लक्ष्य तालिका from_list . में प्रकट नहीं होनी चाहिए , जब तक कि आप स्वयं शामिल होने का इरादा नहीं रखते (जिस स्थिति में यह from_list में किसी अन्य नाम के साथ दिखाई देना चाहिए) )।

अंतिम WHERE खंड उन अद्यतनों को रोकता है जो कुछ भी नहीं बदलेंगे - जो व्यावहारिक रूप से हमेशा एक अच्छा विचार है (लगभग पूर्ण लागत लेकिन कोई लाभ नहीं, विदेशी अपवाद लागू होते हैं)। यदि पुराने और नए दोनों मान NOT NULL होने की गारंटी हैं , इसे सरल करें:

AND   t2.val2 <> t1.val1
  • मैं कैसे (या मैं कर सकता हूं) एकाधिक स्तंभों पर DISTINCT का चयन कैसे करूं?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django+Postgres:वर्तमान लेनदेन निरस्त कर दिया गया है, लेनदेन ब्लॉक के अंत तक आदेशों को अनदेखा कर दिया गया है

  2. यदि इसमें सक्रिय कनेक्शन हैं तो PostgreSQL डेटाबेस को कैसे छोड़ें?

  3. PostgreSQL के लिए Percona वितरण की निगरानी - प्रमुख मेट्रिक्स

  4. PostgreSQL 12 में नया क्या है?

  5. लंबी बाइनरी (कच्चे डेटा) तारों को संग्रहित करना