การ UPDATE หลายแถวพร้อมกันด้วย CASE
ใช้ CASE ภายใน SET เพื่อกำหนดค่าใหม่ที่แตกต่างกันไปตามเงื่อนไข ในคำสั่งเดียว
รูปแบบคำสั่ง
UPDATE yourTableName
SET yourUpdateColumnName = CASE yourConditionColumnName
WHEN Value1 THEN 'UpdatedValue1'
WHEN Value2 THEN 'UpdatedValue2'
...
ELSE yourUpdateColumnName -- หรือไม่ระบุ ELSE เพื่อคงค่าเดิม
END
WHERE yourConditionColumnName IN (Value1, Value2, ...);
ตัวอย่าง: สร้างตารางและข้อมูล
mysql> CREATE TABLE UpdateAllDemo (
-> BookId INT,
-> BookName VARCHAR(200)
-> );
Query OK, 0 rows affected (1.18 sec)
mysql> INSERT INTO UpdateAllDemo VALUES(1000,'Introduction to C');
mysql> INSERT INTO UpdateAllDemo VALUES(1001,'Introduction to Java');
ข้อมูลเริ่มต้น
mysql> SELECT * FROM UpdateAllDemo;
+--------+----------------------+ | BookId | BookName | +--------+----------------------+ | 1000 | Introduction to C | | 1001 | Introduction to Java | +--------+----------------------+ 2 rows in set (0.00 sec)
Bulk Update: เปลี่ยนชื่อหนังสือทั้ง 2 เล่มพร้อมกัน
mysql> UPDATE UpdateAllDemo
-> SET BookName = CASE BookId
-> WHEN 1000 THEN 'C in Depth'
-> WHEN 1001 THEN 'Java in Depth'
-> END
-> WHERE BookId IN (1000, 1001);
Query OK, 2 rows affected (0.24 sec)
ผลลัพธ์หลังอัปเดต
mysql> SELECT * FROM UpdateAllDemo;
+--------+---------------+ | BookId | BookName | +--------+---------------+ | 1000 | C in Depth | | 1001 | Java in Depth | +--------+---------------+ 2 rows in set (0.00 sec)
ข้อดีของวิธีนี้:
- Single query - atomic operation
- ลด round-trip network latency
- Transaction safety ดีกว่า multiple updates
- Performance ดีกว่ามากสำหรับข้อมูลจำนวนมาก
รูปแบบ CASE แบบ Searched (ยืดหยุ่นกว่า):
UPDATE table
SET col = CASE
WHEN condition1 THEN value1
WHEN condition2 THEN value2
ELSE col
END
WHERE condition1 OR condition2;