การใช้ IF() และ CASE ในคำสั่ง UPDATE
MySQL รองรับฟังก์ชัน IF() และ CASE ภายในคำสั่ง UPDATE เพื่ออัปเดตแบบมีเงื่อนไข
ตัวอย่างสร้างตารางและข้อมูล
mysql> CREATE TABLE UpdateWithIfCondition (
-> BookId INT,
-> BookName VARCHAR(200)
-> );
Query OK, 0 rows affected (0.60 sec)
mysql> INSERT INTO UpdateWithIfCondition VALUES(1000,'C in Depth');
mysql> INSERT INTO UpdateWithIfCondition VALUES(1001,'Introduction to Java');
ข้อมูลเริ่มต้น
mysql> SELECT * FROM UpdateWithIfCondition;
+--------+----------------------+ | BookId | BookName | +--------+----------------------+ | 1000 | C in Depth | | 1001 | Introduction to Java | +--------+----------------------+ 2 rows in set (0.00 sec)
อัปเดตพร้อมกันหลายคอลัมน์ด้วย IF()
mysql> UPDATE UpdateWithIfCondition
-> SET BookName = IF(BookName = 'C in Depth', 'Introduction to C', BookName),
-> BookId = IF(BookId = 1001, 2000, BookId);
Query OK, 2 rows affected (0.43 sec)
ผลลัพธ์หลังอัปเดต
mysql> SELECT * FROM UpdateWithIfCondition;
+--------+----------------------+ | BookId | BookName | +--------+----------------------+ | 1000 | Introduction to C | | 2000 | Introduction to Java | +--------+----------------------+ 2 rows in set (0.00 sec)
รูปแบบ IF(): IF(condition, value_if_true, value_if_false)
การใช้ CASE ใน UPDATE (ยืดหยุ่นกว่า):
UPDATE table_name
SET column_name = CASE
WHEN condition1 THEN value1
WHEN condition2 THEN value2
ELSE default_value
END
WHERE ...;
ตัวอย่าง CASE:
UPDATE products
SET price = CASE
WHEN category = 'electronics' THEN price * 1.1
WHEN category = 'books' THEN price * 1.05
ELSE price
END;
ข้อแตกต่าง: IF() เป็นฟังก์ชัน (รับ 3 argument) ส่วน CASE เป็น statement/operator รองรับหลายเงื่อนไข