किसी अन्य तालिका से डेटा के साथ अद्यतन स्तंभ


11

मैं जटिल समस्या पर काम कर रहा हूं, लेकिन मैं इस समस्या को सरल करूंगा।

मेरे पास दो टेबल हैं

A [ID, column1, column2, column3]
B [ID, column1, column2, column3, column4]

और मैं तीसरा अपडेट करना चाहता हूं:

C [ID, column1, column2,column3] 

मैं इस क्वेरी का उपयोग करके एक और तीसरा टेबल अपडेट कर रहा हूं।

UPDATE C 
  set column1=t.firstTab, column2=t.secondTab, column3=t.thirdTab 
  from (select A.column1 as firstTab, B.column2 as secTab, 
              (A.column1 + B.column2) thirdTab 
        from A, B limit 1; ) as t ; 

मुझे मिला:

UPDATE 0

जब मैं यह प्रश्न चलाता हूं:

select A.column1 as firstTab, B.column2 as secTab, (A.column1 + B.column2) thirdTab 
            from A, B limit 1; 

मुझे परिणाम मिले। क्या मैं कुछ भूल रहा हूँ ?

नमूना डेटा: http://sqlfiddle.com/# -15/e4d08/5

जवाबों:


19

उचित फॉर्म होगा (सूचना की कमी के लिए वर्तमान pg संस्करण 9.3 मानकर):

UPDATE C 
SET    column1 = A.column1 
     , column2 = B.column2 
     , column3 = A.column1 + B.column2
FROM   A
JOIN   B ON A.id = B.id  -- ??? not specified in question!
WHERE  C.id = A.id      --  ??? not specified in question!
AND   (C.column1, C.column2, C.column3) IS DISTINCT FROM
      (A.column1, B.column2, A.column1 + B.column2);

अंतिम WHEREखंड रिक्त अपडेट से बचने के लिए वैकल्पिक है जो कुछ भी नहीं बदलेगा (लेकिन फिर भी पूरी कीमत पर एक नया पंक्ति संस्करण लिखें)।

ypercube ने पहले से ही अपनी टिप्पणी में एक बुनियादी स्पष्टीकरण दिया:

आपको दोहराव नहीं मिलता है। आपकी व्युत्पन्न तालिका क्रॉस जॉइनिंग है ( Aऔर बिना किसी जॉइनिंग कंडीशन के ) और फिर एक मनमाना पंक्ति ( बिना ) चुने । यह तब तालिका की सभी पंक्तियों को अद्यतन करने के लिए उस मनमानी पंक्ति से मूल्यों का उपयोग करता है । यदि आप C की विभिन्न पंक्तियों के लिए भिन्न मानों का उपयोग करना चाहते हैं, तो आपको 3 तालिकाओं का उपयोग करना होगा (उपयोग और )BLIMIT 1ORDER BYCJOIN - ONWHERE

विवरण के लिए मैनुअल का संदर्भ लें UPDATE


0

आपको कुछ इस तरह करना होगा:

UPDATE C 
  set column1=t.firstTab, column2=t.secondTab, column3=t.thirdTab 
  from (select A.column1 as firstTab, B.column2 as secTab, 
              (A.column1 + B.column2) thirdTab 
        from A
        join B  on ...
        where ... ) as t
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.