MySQL में CASE स्टेटमेंट के साथ मानों को स्वैप करना
जब एक कॉलम में केवल दो संभावित मान हों (जैसे 'a' और 'b'), तो CASE स्टेटमेंट का उपयोग करके उन्हें एक ही UPDATE क्वेरी में स्वैप किया जा सकता है।
व्यावहारिक उदाहरण
तालिका बनाना
mysql> CREATE TABLE DemoTable (
Value CHAR(1)
);
रिकॉर्ड डालना
mysql> INSERT INTO DemoTable VALUES('a');
mysql> INSERT INTO DemoTable VALUES('b');
mysql> INSERT INTO DemoTable VALUES('a');
mysql> INSERT INTO DemoTable VALUES('a');
mysql> INSERT INTO DemoTable VALUES('b');
mysql> INSERT INTO DemoTable VALUES('a');
mysql> INSERT INTO DemoTable VALUES('b');
स्वैप करने से पहले डेटा देखना
mysql> SELECT * FROM DemoTable;
आउटपुट:
+-------+ | Value | +-------+ | a | | b | | a | | a | | b | | a | | b | +-------+
CASE स्टेटमेंट के साथ स्वैप करने के लिए क्वेरी
mysql> UPDATE DemoTable
SET Value = CASE
WHEN Value = 'a' THEN 'b'
ELSE 'a'
END;
आउटपुट: Query OK, 7 rows affected
स्वैप करने के बाद डेटा देखना
mysql> SELECT * FROM DemoTable;
आउटपुट:
+-------+ | Value | +-------+ | b | | a | | b | | b | | a | | b | | a | +-------+
यह तरीका क्यों काम करता है
CASE स्टेटमेंट प्रत्येक पंक्ति के लिए मूल मान का मूल्यांकन करता है और नया मान निर्धारित करता है। चूंकि यह एक ही परमाणु ऑपरेशन है, इसलिए कोई मध्यवर्ती स्थिति नहीं होती जहां मान गलत हों।
वैकल्पिक तरीका: UPDATE DemoTable SET Value = IF(Value = 'a', 'b', 'a');