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

อัปเดตคอลัมน์ด้วยค่าจาก CASE Statement ใน MySQL

ใช้ 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 CASECASE col WHEN val1 THEN v1 WHEN val2 THEN v2 ENDเปรียบเทียบค่า col กับค่าคงที่
Searched CASECASE 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 และมีประสิทธิภาพ