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

แทนที่ค่าในตาราง MySQL ด้วย CASE Statement

ใช้ 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