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

อัปเดตหลายคอลัมน์พร้อมกันด้วย IF() ใน MySQL

การใช้ IF() ในคำสั่ง UPDATE เพื่อตั้งค่าเงื่อนไข

ฟังก์ชัน IF(condition, value_if_true, value_if_false) ใช้ในคำสั่ง UPDATE เพื่อตั้งค่าคอลัมน์ตามเงื่อนไขได้หลายคอลัมน์พร้อมกัน

Syntax

UPDATE table_name 
SET col1 = IF(condition, val1, val2),
    col2 = IF(condition, val3, val4)
WHERE condition;

ตัวอย่างการใช้งาน

สร้างตารางและเพิ่มข้อมูล:

mysql> CREATE TABLE DemoTable716 (
    Id VARCHAR(100),
    Value1 INT,
    Value2 INT,
    Value3 INT
);
Query OK, 0 rows affected (0.65 sec)

mysql> INSERT INTO DemoTable716 VALUES 
    ('100', 45, 86, 79),
    ('101', 67, 67, 99),
    ('102', 77, 57, 98),
    ('103', 45, 67, 92);
Query OK, 4 rows affected

ข้อมูลต้นฉบับ:

mysql> SELECT * FROM DemoTable716;
+------+--------+--------+--------+
| Id   | Value1 | Value2 | Value3 |
+------+--------+--------+--------+
| 100  | 45     | 86     | 79     |
| 101  | 67     | 67     | 99     |
| 102  | 77     | 57     | 98     |
| 103  | 45     | 67     | 92     |
+------+--------+--------+--------+
4 rows in set (0.00 sec)

อัปเดต Value3 ให้เป็น 67 หาก Value1=67 **หรือ** Value2=67 มิฉะนั้นเป็น NULL (เฉพาะ Id='101'):

mysql> UPDATE DemoTable716 
SET Value3 = IF(Value1 = 67 OR Value2 = 67, 67, NULL) 
WHERE Id = '101';
Query OK, 1 row affected (0.14 sec)

ผลลัพธ์ - แถว Id 101 เปลี่ยน Value3 จาก 99 เป็น 67:

mysql> SELECT * FROM DemoTable716;
+------+--------+--------+--------+
| Id   | Value1 | Value2 | Value3 |
+------+--------+--------+--------+
| 100  | 45     | 86     | 79     |
| 101  | 67     | 67     | 67     |  <-- เปลี่ยน
| 102  | 77     | 57     | 98     |
| 103  | 45     | 67     | 92     |
+------+--------+--------+--------+
4 rows in set (0.00 sec)

ฟังก์ชันเงื่อนไขอื่นๆ ที่ใช้ใน UPDATE ได้

  • CASE WHEN ... THEN ... ELSE ... END - เงื่อนไขซับซ้อน หลายกรณี
  • COALESCE(val1, val2, ...) - เลือกค่าแรกที่ไม่ใช่ NULL
  • NULLIF(expr1, expr2) - คืน NULL หากเท่ากัน

ตัวอย่าง CASE WHEN

UPDATE DemoTable716 
SET Value3 = CASE 
    WHEN Value1 > Value2 THEN Value1 
    WHEN Value2 > Value1 THEN Value2 
    ELSE 0 
END;