ใช้ UPDATE ... SET column = CASE ... END เพื่ออัปเดตค่าคอลัมน์ตามเงื่อนไขหลายแบบใน Statement เดียว
Syntax
UPDATE table_name
SET column_name = CASE
WHEN condition1 THEN value1
WHEN condition2 THEN value2
ELSE default_value
END
WHERE condition;
ตัวอย่าง: สลับคะแนน 45 ↔ 98, ค่าอื่นเป็น 0
1. สร้างตารางและเพิ่มข้อมูล
mysql> create table DemoTable1925 (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(20),
-> StudentMarks int
-> ); Query OK, 0 rows affected (0.00 sec)
mysql> insert into DemoTable1925(StudentName,StudentMarks) values('Chris',98); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1925(StudentName,StudentMarks) values('David',45); Query OK, 1 row affected (0.00 sec)
ข้อมูลต้นฉบับ:
mysql> select * from DemoTable1925;
+-----------+-------------+--------------+ | StudentId | StudentName | StudentMarks | +-----------+-------------+--------------+ | 1 | Chris | 98 | | 2 | David | 45 | +-----------+-------------+--------------+ 2 rows in set (0.00 sec)
2. อัปเดตด้วย CASE: 45→98, 98→0, อื่น→คงเดิม (แต่ WHERE จำกัด 45,98)
mysql> update DemoTable1925
-> set StudentMarks = case StudentMarks
-> when 45 then 98
-> when 98 then 0
-> end
-> where StudentMarks IN (45,98);
Query OK, 2 rows affected (0.00 sec) Rows matched: 2 Changed: 2 Warnings: 0
3. ตรวจสอบผลลัพธ์
mysql> select * from DemoTable1925;
+-----------+-------------+--------------+ | StudentId | StudentName | StudentMarks | +-----------+-------------+--------------+ | 1 | Chris | 0 | -- 98 → 0 | 2 | David | 98 | -- 45 → 98 +-----------+-------------+--------------+ 2 rows in set (0.00 sec)
รูปแบบ CASE ใน UPDATE
| รูปแบบ | Syntax | ตัวอย่าง |
|---|---|---|
| Simple CASE | CASE col WHEN val1 THEN v1 WHEN val2 THEN v2 END | เปรียบเทียบค่า col กับค่าคงที่ |
| Searched CASE | CASE WHEN col > 90 THEN 'A' WHEN col > 80 THEN 'B' END | เงื่อนไขซับซ้อน (Range, AND/OR) |
⚠️ ข้อควรระวัง
- ถ้าไม่มี
ELSEและไม่มีเงื่อนไขตรง → จะได้NULL(อาจไม่ใช่เจตนา) - ใช้
WHEREจำกัด Scope ให้เฉพาะแถวที่ต้องการอัปเดต เพื่อ Performance และความปลอดภัย CASEคืนค่าได้หลายชนิดข้อมูล แต่คอลัมน์ปลายทางต้องรองรับ
สรุป: ใช้ UPDATE ... SET col = CASE ... END WHERE ... เพื่ออัปเดตค่าตามเงื่อนไขหลายแบบใน Statement เดียว Atomic และมีประสิทธิภาพ