Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में JOIN और UPDATE से दूसरी टेबल के कॉलम मान के आधार पर कॉलम अपडेट करें

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 में क्रॉस-टेबल अपडेट का कुशल, मूल तरीका है।

  1. Java MySQL का उपयोग करके MySQL टेबल अपडेट करें Java MySQL का उपयोग करके MySQL टेबल अपडेट करें

    JDBC में PreparedStatement का उपयोग करके पैरामीटरीकृत अपडेट को सुरक्षित रूप से निष्पादित करें। टेबल बनाना और डेटा डालना CREATE TABLE DemoTable(Id INT, FirstName VARCHAR(40)); Query OK, 0 rows affected (0.62 sec) INSERT INTO DemoTable VALUES(100,Chris),(111,Mike),(121,Sam); अपडेट से पहले SELECT

  1. - MySQL में UPDATE SET से एकल कॉलम अपडेट करने का सर्वोत्तम तरीका

    MySQL टेबल में एकल कॉलम के सभी मानों को अपडेट करने के लिए UPDATE और SET का उपयोग करें। टेबल बनाएं mysql> CREATE TABLE DemoTable1873 ( Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, FirstName VARCHAR(20) ); डेटा डालें mysql> INSERT INTO DemoTable1873(FirstName) VALUES(John), (Adam), (Dav

  1. - MySQL में UPDATE JOIN से दूसरी टेबल के डेटा से पहली टेबल अपडेट करें

    UPDATE ... JOIN सिंटैक्स UPDATE targetTable tbl1 JOIN sourceTable tbl2 ON tbl1.commonCol = tbl2.commonCol SET tbl1.targetCol = tbl2.sourceCol; उदाहरण स्रोत टेबल (demo54): पूरा डेटा insert into demo54 values(John,Smith), (John,Smith), (David,Smith); लक्ष्य टेबल (demo55): lastName NULL insert int