MySQL में दो कॉलम मान स्वैप करना: उपयोगकर्ता वेरिएबल का उपयोग
MySQL में एक ही पंक्ति के दो कॉलम मानों को स्वैप करने के लिए उपयोगकर्ता वेरिएबल (@var) का उपयोग करके अस्थायी भंडारण किया जा सकता है।
उदाहरण: Id=2 वाली पंक्ति में Number1 और Number2 स्वैप करें
टेबल बनाएं:
CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Number1 INT, Number2 INT
);
INSERT INTO DemoTable (Number1, Number2) VALUES (10, 30), (60, 50), (110, 100);
डेटा:
+----+---------+---------+ | Id | Number1 | Number2 | +----+---------+---------+ | 1 | 10 | 30 | | 2 | 60 | 50 | | 3 | 110 | 100 | +----+---------+---------+
स्वैप क्वेरी (Id=2 के लिए)
UPDATE DemoTable
SET Number1 = (@tmp := Number1),
Number1 = Number2,
Number2 = @tmp
WHERE Id = 2;
परिणाम:
+----+---------+---------+ | Id | Number1 | Number2 | +----+---------+---------+ | 1 | 10 | 30 | | 2 | 50 | 60 | | 3 | 110 | 100 | +----+---------+---------+
चरण-दर-चरण
@tmp := Number1— वर्तमान Number1 (60) को @tmp में स्टोर करता है, और Number1 को 60 सेट करता है (कोई बदलाव नहीं)Number1 = Number2— Number1 को Number2 (50) पर सेट करता हैNumber2 = @tmp— Number2 को @tmp (मूल Number1 = 60) पर सेट करता है
महत्वपूर्ण: असाइनमेंट क्रम
MySQL SET क्लॉज में असाइनमेंट बाएं से दाएं मूल्यांकन करता है। इसलिए:
UPDATE DemoTable SET Number1 = Number2, Number2 = Number1 WHERE Id = 2;
नोट: यह MySQL के पुराने संस्करणों में अप्रत्याशित व्यवहार दे सकता है। उपयोगकर्ता वेरिएबल तरीका सुरक्षित है।