ใน MySQL สามารถอัปเดตค่าคอลัมน์ต่างกันไปตามเงื่อนไขได้โดยใช้ฟังก์ชัน IF() หรือ CASE WHEN ภายในคำสั่ง UPDATE ซึ่งช่วยให้เขียน Logic ซับซ้อนในคำสั่งเดียวได้
ตัวอย่างการใช้งาน
สร้างตารางและเพิ่มข้อมูล:
mysql> CREATE TABLE DemoTable1436 (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name VARCHAR(20)
-> );
mysql> INSERT INTO DemoTable1436 (Name) VALUES ('Chris'), ('David'), ('Bob'), ('David'), ('David');
ดูข้อมูลก่อนอัปเดต:
mysql> SELECT * FROM DemoTable1436; +----+-------+ | Id | Name | +----+-------+ | 1 | Chris | | 2 | David | | 3 | Bob | | 4 | David | | 5 | David | +----+-------+
อัปเดตเฉพาะ Id=2 ถ้า Name='David' ให้เปลี่ยนเป็น 'Carol Taylor' มิฉะนั้นคงเดิม:
mysql> UPDATE DemoTable1436
-> SET Name = IF(Name = 'David', 'Carol Taylor', Name)
-> WHERE Id = 2;
ผลลัพธ์ (แถว Id=2 เปลี่ยน, อื่นๆ คงเดิม):
mysql> SELECT * FROM DemoTable1436; +----+--------------+ | Id | Name | +----+--------------+ | 1 | Chris | | 2 | Carol Taylor | | 3 | Bob | | 4 | David | | 5 | David | +----+--------------+
ไวยากรณ์ IF()
IF(condition, value_if_true, value_if_false)
การใช้ CASE WHEN สำหรับเงื่อนไขหลายขั้น
UPDATE DemoTable1436
SET Name = CASE
WHEN Name = 'David' THEN 'Carol Taylor'
WHEN Name = 'Bob' THEN 'Robert Smith'
WHEN Name = 'Chris' THEN 'Christopher'
ELSE Name
END
WHERE Id IN (1,2,3);
ความแตกต่าง IF() vs CASE WHEN
| คุณสมบัติ | IF() | CASE WHEN |
|---|---|---|
| จำนวนเงื่อนไข | 2 ทางเลือก (True/False) | หลายเงื่อนไข (Multiple WHEN) |
| ความยืดหยุ่น | จำกัด | สูง |
| อ่านง่าย | ดีสำหรับเงื่อนไขเดียว | ดีสำหรับหลายเงื่อนไข |
| มาตรฐาน SQL | MySQL Specific | ANSI SQL Standard |
กรณีการใช้งานจริง
- อัปเดตสถานะออเดอร์ตามเงื่อนไขหลายขั้น (Pending → Processing → Shipped)
- คำนวณส่วนลดตามยอดซื้อ/สมาชิก/โปรโมชั่น
- จัดกลุ่มลูกค้าตามพฤติกรรม (RFM Analysis)
- Normalize ข้อมูลที่มีความไม่สม่ำเสมอ