UPDATE क्वेरी में 3 टेबल JOIN कैसे करें?


466

मैंने एक प्रश्न पूछा और यह उत्तर मिला जिससे मदद मिली।

   UPDATE TABLE_A a JOIN TABLE_B b 
   ON a.join_col = b.join_col AND a.column_a = b.column_b 
   SET a.column_c = a.column_c + 1

अब मैं ऐसा करने के लिए देख रहा हूँ अगर वहाँ 3 टेबल कुछ इस तरह से शामिल हैं।

    UPDATE tableC c JOIN tableB b JOIN tableA a

मेरा प्रश्न मूल रूप से है ... क्या यह संभव है कि किसी UPDATEकथन पर 3 तालिका सम्मिलित हों ? और इसके लिए सही सिंटैक्स क्या है? धन्यवाद। क्या मैं ...

 JOIN tableB, tableA
 JOIN tableB JOIN tableA

2
यकीन है कि यह संभव है। कोशिश करो। सिंटैक्स ठीक वैसे ही है जैसे आपके पास है-बस आपको अगली JOINऔर उसकी ONस्थिति को जोड़ने की आवश्यकता है , जैसा कि आप किसी SELECTप्रश्न में करेंगे ।
माइकल बर्कोवस्की

2
UPDATE t1 JOIN t2 ON t1.id = t2.t1_id JOIN t3 ON t3.id = t2.t3_id SET t1.col = 'newval'
माइकल बेर्कोव्स्की

1
यहाँ उल्लिखित प्रश्न है: stackoverflow.com/questions/15206746/…
उर्स

जवाबों:


809

जवाब yesआप कर सकते हैं

इसे ऐसे ही आजमाएं

UPDATE TABLE_A a 
    JOIN TABLE_B b ON a.join_col = b.join_col AND a.column_a = b.column_b 
    JOIN TABLE_C c ON [condition]
SET a.column_c = a.column_c + 1

संपादित करें:

सामान्य अद्यतन के लिए शामिल हों:

   UPDATE TABLEA a 
   JOIN TABLEB b ON a.join_colA = b.join_colB  
   SET a.columnToUpdate = [something]

2
अजीब बात यह है कि मेरा हेइडीएसक्यूएल सॉफ्टवेयर शून्य प्रभावित पंक्तियों की रिपोर्ट करता है, हालांकि डेटा दिखाता है कि अपडेट किए गए थे।
पियानोवादक

1
@Pianoman मेरे साथ भी ऐसा ही हुआ और इसका UPDATE CURRENT_TIMESTAMP से कुछ लेना-देना था, मैंने बस मैन्युअल रूप से अपडेट जोड़ा और इसे ठीक कर दिया, यह कहते हुए कि अगर यह किसी और के साथ होता है
eric.itzhak

यदि आपको अपने जोड़ों को सही करने के लिए एक दृश्य सहायता की आवश्यकता है: Browse-tutorials.com/tutorial/mysql-joins-visual-repretation
ram4nd

मुझे लगता है कि निम्नलिखित एक बेहतर सामान्य योजना है: UPDATE table A JOIN table B ON {join data} JOIN table C ON {join data} JOIN {more join tables} SET A.column = {expression}(मुझे माफ कर दो अगर यह ब्लास्ट संपादक मुझे पूरी पोस्ट किए बिना
नईलाइन्स

कहाँ है WHERE?? या WHEREसंभव नहीं है?
ग्रीन

42

समान परिणाम प्राप्त करने का वैकल्पिक तरीका JOINकीवर्ड का उपयोग करना बिल्कुल नहीं है ।

UPDATE TABLE_A, TABLE_B
SET TABLE_A.column_c = TABLE_B.column_c + 1
WHERE TABLE_A.join_col = TABLE_B.join_col

3
मैंने 5.5.62 पर यह कोशिश की और mysql वाक्य रचना की तरह नहीं किया। मैनुअल के अनुसार [ dev.mysql.com/doc/refman/5.6/en/update.html] , क्वेरी होनी चाहिए:UPDATE TABLE_A, TABLE_B SET TABLE_A.column_c = TABLE_A.column_c +1 WHERE TABLE_A.join_col = TABLE_B.join_col
Noe Nieto

7
यह JOINउसी तरह से SELECT * FROM TABLE_A, TABLE_B ...करता है
जैसे कि

तो क्या इसका मतलब यह है कि 5.5 में अपडेट के लिए केवल निहित जोड़ फार्म स्वीकार किए जाते हैं?
यूजरफुसर

@userfuser नहीं, यह नहीं करता है, मैनुअल वाक्यविन्यास बताता है: UPDATE [LOW_PRIORITY] [IGNORE] table_references SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition]बाद में, मैनुअल बताता है: " table_referencesखंड में शामिल तालिकाओं की सूची है। इसका सिंटैक्स धारा 13.2.9.2, JOIN सिंटैक्स में वर्णित है ।"
ह्मंडर्ट

4
ठीक वैसा ही परिणाम नहीं - आप बाईं जोड़ को सिंटैक्स से जोड़ सकते हैं।
गेरार्ड ओनील

10

नीचे अद्यतन क्वेरी है जिसमें शामिल हैं JOINऔर WHEREदोनों। उसी तरह से हम कई जॉइन / जहाँ क्लॉज़ का उपयोग कर सकते हैं, आशा है कि यह आपकी मदद करेगा: -

UPDATE opportunities_cstm oc JOIN opportunities o ON oc.id_c = o.id
 SET oc.forecast_stage_c = 'APX'
 WHERE o.deleted = 0
   AND o.sales_stage IN('ABC','PQR','XYZ')

3
ढेर अतिप्रवाह में आपका स्वागत है! इस कोड स्निपेट के लिए धन्यवाद, जो कुछ तत्काल सहायता प्रदान कर सकता है। एक उचित व्याख्या यह दर्शाती है कि यह समस्या का एक अच्छा समाधान क्यों है, यह दिखाते हुए इसके शैक्षिक मूल्य में बहुत सुधार करेगा , और यह भविष्य के पाठकों के लिए समान के साथ अधिक उपयोगी होगा, लेकिन समान नहीं, प्रश्न। कृपया स्पष्टीकरण जोड़ने के लिए अपना उत्तर संपादित करें, और इस बात का संकेत दें कि क्या सीमाएँ और मान्यताएँ लागू होती हैं।
टोबे स्पाइट

2

एक वैकल्पिक सामान्य योजना, जिसे मैं केवल एक स्वतंत्र उत्तर के रूप में जोड़ रहा हूं क्योंकि विस्फोट "एक उत्तर पर टिप्पणी" पूरे संपादन को पोस्ट किए बिना नई रूपरेखा नहीं लेगा, भले ही यह अभी तक समाप्त नहीं हुआ है।

UPDATE table A
JOIN table B ON {join fields}
JOIN table C ON {join fields}
JOIN {as many tables as you need}
SET A.column = {expression}

उदाहरण:

UPDATE person P
JOIN address A ON P.home_address_id = A.id
JOIN city C ON A.city_id = C.id
SET P.home_zip = C.zipcode;

1

PostgreSQL उदाहरण के लिए:

UPDATE TableA AS a
SET param_from_table_a=FALSE -- param FROM TableA
FROM TableB AS b
WHERE b.id=a.param_id AND a.amount <> 0; 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.