MySQL में UPDATE ... JOIN सिंटैक्स का उपयोग करके एक टेबल के कॉलम को दूसरी टेबल के संबंधित कॉलम मान के आधार पर अपडेट कर सकते हैं। यह डेटा सिंक्रनाइज़ेशन, माइग्रेशन, और संदर्भ डेटा लागू करने के लिए मानक पैटर्न है।
सिंटैक्स
UPDATE target_table t1 JOIN source_table t2 ON t1.join_col = t2.join_col SET t1.target_col = t2.source_col [WHERE condition];
व्यावहारिक उदाहरण
लक्ष्य टेबल (अपडेट की जाने वाली):
mysql> CREATE TABLE DemoTable1 (Id INT, Name VARCHAR(10)); mysql> INSERT INTO DemoTable1 VALUES(100, 'Bob');
स्रोत टेबल (नए मान वाली):
mysql> CREATE TABLE DemoTable2 (Id INT, FirstName VARCHAR(10)); mysql> INSERT INTO DemoTable2 VALUES(100, 'Adam');
अपडेट से पहले:
mysql> SELECT * FROM DemoTable1; -- Bob mysql> SELECT * FROM DemoTable2; -- Adam
JOIN के साथ UPDATE
mysql> UPDATE DemoTable1
-> JOIN DemoTable2 ON DemoTable1.Id = DemoTable2.Id
-> SET DemoTable1.Name = DemoTable2.FirstName;
Query OK, 1 row affected (0.15 sec) Rows matched: 1 Changed: 1 Warnings: 0
अपडेट के बाद
mysql> SELECT * FROM DemoTable1;
+------+------+ | Id | Name | +------+------+ | 100 | Adam | +------+------+
मुख्य बिंदु
JOINक्लॉजUPDATEके तुरंत बाद आता है (MySQL-विशिष्ट सिंटैक्स)SETमें लक्ष्य टेबल का कॉलम = स्रोत टेबल का कॉलमWHEREवैकल्पिक - अतिरिक्त फ़िल्टर के लिए- एकाधिक टेबल JOIN कर सकते हैं
विभिन्न JOIN प्रकार
-- INNER JOIN (डिफ़ॉल्ट): केवल मेल खाने वाली पंक्तियां अपडेट UPDATE t1 JOIN t2 ON t1.id = t2.id SET t1.col = t2.col; -- LEFT JOIN: t1 की सभी पंक्तियां, मेल न होने पर NULL UPDATE t1 LEFT JOIN t2 ON t1.id = t2.id SET t1.col = COALESCE(t2.col, t1.col);
एकाधिक कॉलम अपडेट
UPDATE target t
JOIN source s ON t.id = s.id
SET t.name = s.name,
t.email = s.email,
t.updated_at = NOW();
सबक्वेरी विकल्प (मानक SQL)
UPDATE DemoTable1 SET Name = (SELECT FirstName FROM DemoTable2 WHERE Id = DemoTable1.Id) WHERE Id IN (SELECT Id FROM DemoTable2);
लाभ: मानक SQL, सभी DB में काम करता है। नुकसान: MySQL में धीमा हो सकता है।
सावधानियां
- कोई UNDO नहीं: अपडेट से पहले बैकअप लें या ट्रांजैक्शन उपयोग करें
- डुप्लिकेट JOIN कुंजी: यदि स्रोत में डुप्लिकेट ID हैं, तो परिणाम अनिश्चित
- NULL मान: स्रोत कॉलम NULL हो तो लक्ष्य NULL हो जाएगा -
COALESCEउपयोग करें - ट्रिगर: अपडेट ट्रिगर फायर होंगे
सुरक्षित पैटर्न: ट्रांजैक्शन में
START TRANSACTION; UPDATE t1 JOIN t2 ON t1.id = t2.id SET t1.col = t2.col; SELECT * FROM t1; -- जांचें COMMIT; -- या ROLLBACK;
उपयोग के मामले
- स्टेजिंग टेबल से प्रोडक्शन टेबल में डेटा लोड
- संदर्भ डेटा (देश कोड, मुद्रा दर) लागू करना
- डुप्लिकेट मर्ज: मास्टर रिकॉर्ड में डेटा समेकित करना
- स्कीमा माइग्रेशन: नए कॉलम को पुराने से भरना
UPDATE ... JOIN MySQL में क्रॉस-टेबल अपडेट का कुशल, मूल तरीका है।