Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

สลับค่าระหว่าง 2 คอลัมน์ใน MySQL (Swap Columns)

ใช้ 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 ได้หากค่ามากมาก