ใช้ Logic คณิตศาสตร์ บวก-ลบ ไม่ต้องใช้ Temp Variable
หลักการ Swap (a, b)
1. a = a + b 2. b = a - b -- (a+b) - b = a (ค่าเดิมของ a) 3. a = a - b -- (a+b) - a = b (ค่าเดิมของ b)
สร้างตารางและข้อมูล
mysql> CREATE TABLE SwappingTwoColumnsValueDemo (
-> FirstColumnValue INT,
-> SecondColumnValue INT
-> );
mysql> INSERT INTO SwappingTwoColumnsValueDemo VALUES
-> (10,20), (30,40), (50,60), (70,80), (90,100);
ก่อน Swap:
+------------------+-------------------+ | FirstColumnValue | SecondColumnValue | +------------------+-------------------+ | 10 | 20 | | 30 | 40 | | 50 | 60 | | 70 | 80 | | 90 | 100 | +------------------+-------------------+
Query Swap (Single Statement)
mysql> UPDATE SwappingTwoColumnsValueDemo
-> SET FirstColumnValue = FirstColumnValue + SecondColumnValue,
-> SecondColumnValue = FirstColumnValue - SecondColumnValue,
-> FirstColumnValue = FirstColumnValue - SecondColumnValue;
หลัง Swap:
+------------------+-------------------+ | FirstColumnValue | SecondColumnValue | +------------------+-------------------+ | 20 | 10 | | 40 | 30 | | 60 | 50 | | 80 | 70 | | 100 | 90 | +------------------+-------------------+
วิธีอื่น: ใช้ Temp Variable (ใน Stored Procedure)
UPDATE t SET a = (@temp := a), a = b, b = @temp;
ข้อควรระวัง: วิธีคณิตศาสตร์ทำงานได้เฉพาะ Numeric Type เท่านั้น (INT, DECIMAL, FLOAT) ไม่ได้กับ String/Date และอาจ Overflow ได้หากค่ามากมาก