ใช้ CASE ในคำสั่ง UPDATE เพื่อแทนที่ค่าตามเงื่อนไข
สร้างตารางตัวอย่าง
mysql> CREATE TABLE replaceValueDemo (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name VARCHAR(10),
-> isGreaterThan18 VARCHAR(10)
-> );
เพิ่มข้อมูลตัวอย่าง
mysql> INSERT INTO replaceValueDemo(Name, isGreaterThan18) VALUES
('John', 'YES'), ('Carol', 'NO'), ('Mike', 'YES'), ('Bob', 'YES'),
('Larry', 'NO'), ('David', 'NO'), ('James', 'DONOTKNOW'), ('Robert', 'DONOTKNOW');
แสดงข้อมูลก่อน (YES/NO/DONOTKNOW)
mysql> SELECT * FROM replaceValueDemo;
ผลลัพธ์:
+----+--------+-----------------+ | Id | Name | isGreaterThan18 | +----+--------+-----------------+ | 1 | John | YES | | 2 | Carol | NO | | 3 | Mike | YES | | 4 | Bob | YES | | 5 | Larry | NO | | 6 | David | NO | | 7 | James | DONOTKNOW | | 8 | Robert | DONOTKNOW | +----+--------+-----------------+
สลับ YES <-> NO โดยใช้ CASE (เฉพาะค่า YES และ NO)
mysql> UPDATE replaceValueDemo
-> SET isGreaterThan18 = CASE
-> WHEN isGreaterThan18 = 'YES' THEN 'NO'
-> ELSE 'YES'
-> END
-> WHERE isGreaterThan18 IN ('YES', 'NO');
Query OK, 6 rows affected (0.19 sec)
ตรวจสอบหลังแทนที่ (YES<->NO สลับกัน, DONOTKNOW คงเดิม)
mysql> SELECT * FROM replaceValueDemo;
ผลลัพธ์:
+----+--------+-----------------+ | Id | Name | isGreaterThan18 | +----+--------+-----------------+ | 1 | John | NO | | 2 | Carol | YES | | 3 | Mike | NO | | 4 | Bob | NO | | 5 | Larry | YES | | 6 | David | YES | | 7 | James | DONOTKNOW | | 8 | Robert | DONOTKNOW | +----+--------+-----------------+
รูปแบบ CASE ใน UPDATE
UPDATE table_name
SET column = CASE
WHEN condition1 THEN value1
WHEN condition2 THEN value2
ELSE default_value
END
WHERE condition;
กรณีใช้งานจริง
- สลับสถานะ: Active <-> Inactive
- Map ค่าเก่าเป็นค่าใหม่หลายค่าในคำสั่งเดียว
- Normalize ข้อมูล: 'Y'/'N' -> 'Yes'/'No'
- คำนวณค่าใหม่ตามเงื่อนไขซับซ้อน
ข้อได้เปรียบของ CASE
- อ่านง่าย เข้าใจง่ายกว่า IF ซ้อนหลายชั้น
- รองรับหลายเงื่อนไขในคำสั่งเดียว
- เป็นมาตรฐาน SQL ทำงานได้ในทุก DBMS