MySQL में UPDATE स्टेटमेंट के WHERE क्लॉज में सबक्वेरी का उपयोग करके अन्य तालिका या शर्त के आधार पर पंक्तियों को अपडेट किया जा सकता है।
सिंटैक्स
UPDATE table_name
SET column = value
WHERE column IN (SELECT ... FROM ...);
उदाहरण
तालिका बनाएं:
mysql> CREATE TABLE DemoTable (Id INT, Name VARCHAR(20));
mysql> INSERT INTO DemoTable VALUES (100, 'Chris'), (250, 'David'), (150, 'Mike');
डेटा
+------+-------+
| Id | Name |
+------+-------+
| 100 | Chris |
| 250 | David |
| 150 | Mike |
+------+-------+
क्वेरी: अधिकतम ID वाली पंक्ति अपडेट करें
mysql> UPDATE DemoTable
-> SET Name = 'Robert'
-> WHERE Id IN (
-> SELECT * FROM (SELECT MAX(Id) FROM DemoTable) AS tbl1
-> );
परिणाम
+------+--------+
| Id | Name |
+------+--------+
| 100 | Chris |
| 250 | Robert |
| 150 | Mike |
+------+--------+
व्याख्या
SELECT MAX(Id) FROM DemoTable→ 250SELECT * FROM (...) AS tbl1- डिराइव्ड टेबल (MySQL आवश्यकता)WHERE Id IN (250)- Id=250 वाली पंक्ति अपडेट होती है
महत्वपूर्ण: MySQL सबक्वेरी प्रतिबंध
MySQL उसी तालिका को अपडेट करते समय सीधे सबक्वेरी में संदर्भित करने की अनुमति नहीं देता। समाधान: डिराइव्ड टेबल (उपनाम के साथ) उपयोग करें।
अन्य पैटर्न
WHERE Id = (SELECT MAX(Id) FROM DemoTable)- स्केलर सबक्वेरीJOINके साथ अपडेट (बहु-तालिका):UPDATE t1 JOIN t2 ON t1.id = t2.id SET t1.col = t2.val;
सुरक्षा जांच
-- पहले SELECT से पुष्टि करें
SELECT * FROM DemoTable WHERE Id = (SELECT MAX(Id) FROM DemoTable);