शर्त के साथ UPDATE स्टेटमेंट का उपयोग करना
WHERE क्लॉज में IS NOT NULL चेक का उपयोग करके केवल उन पंक्तियों को अपडेट करें जहां स्रोत कॉलम NULL नहीं है।
सिंटैक्स
UPDATE yourTableName SET targetColumn = sourceColumn WHERE sourceColumn IS NOT NULL;
उदाहरण
1. टेबल बनाना
mysql> CREATE TABLE DemoTable (
UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserFirstName VARCHAR(20),
ListOfName VARCHAR(20)
);
Query OK, 0 rows affected (0.59 sec)
2. डेटा डालना (कुछ NULL मानों के साथ)
mysql> INSERT INTO DemoTable(UserFirstName, ListOfName) VALUES('John', 'Larry');
mysql> INSERT INTO DemoTable(UserFirstName, ListOfName) VALUES('Carol', NULL);
mysql> INSERT INTO DemoTable(UserFirstName, ListOfName) VALUES('David', 'Sam');
mysql> INSERT INTO DemoTable(UserFirstName, ListOfName) VALUES('Bob', NULL);
mysql> INSERT INTO DemoTable(UserFirstName, ListOfName) VALUES(NULL, NULL);
3. अपडेट से पहले डेटा
mysql> SELECT * FROM DemoTable;
+--------+---------------+------------+ | UserId | UserFirstName | ListOfName | +--------+---------------+------------+ | 1 | John | Larry | | 2 | Carol | NULL | | 3 | David | Sam | | 4 | Bob | NULL | | 5 | NULL | NULL | +--------+---------------+------------+ 5 rows in set (0.00 sec)
4. अपडेट क्वेरी चलाना
mysql> UPDATE DemoTable
SET UserFirstName = ListOfName
WHERE ListOfName IS NOT NULL;
Query OK, 2 rows affected (0.26 sec)
Rows matched: 2 Changed: 2 Warnings: 0
5. अपडेट के बाद डेटा
mysql> SELECT * FROM DemoTable;
+--------+---------------+------------+ | UserId | UserFirstName | ListOfName | +--------+---------------+------------+ | 1 | Larry | Larry | | 2 | Carol | NULL | | 3 | Sam | Sam | | 4 | Bob | NULL | | 5 | NULL | NULL | +--------+---------------+------------+ 5 rows in set (0.00 sec)
महत्वपूर्ण बिंदु
- केवल पंक्ति 1 और 3 अपडेट हुईं (जहां ListOfName NULL नहीं था)
- पंक्ति 2, 4, 5 अपरिवर्तित रहीं क्योंकि ListOfName NULL था
- WHERE क्लॉज के बिना सभी पंक्तियाँ अपडेट हो जातीं, NULL मान भी कॉपी हो जाते
वैकल्पिक: COALESCE का उपयोग
यदि आप NULL होने पर डिफ़ॉल्ट मान रखना चाहते हैं:
UPDATE DemoTable SET UserFirstName = COALESCE(ListOfName, UserFirstName);
यह ListOfName को UserFirstName में कॉपी करता है, लेकिन यदि ListOfName NULL है तो UserFirstName अपरिवर्तित रहता है।
एकाधिक कॉलम अपडेट करना
UPDATE DemoTable SET Col1 = SourceCol1, Col2 = SourceCol2 WHERE SourceCol1 IS NOT NULL OR SourceCol2 IS NOT NULL;