ภาพรวม
ใช้ IF() ในคำสั่ง UPDATE เพื่อตั้งค่าคอลัมน์เป็น 2 ค่าที่แตกต่างกัน ตามเงื่อนไข
ไวยากรณ์
UPDATE table_name
SET column_name = IF(condition, value_if_true, value_if_false);
ตัวอย่างสมบูรณ์
1. สร้างตารางและข้อมูล
CREATE TABLE DemoTable (Value INT);
INSERT INTO DemoTable VALUES (10), (20), (10), (20), (30);
2. ข้อมูลก่อนอัปเดต
SELECT * FROM DemoTable;
+-------+
| Value |
+-------+
| 10 |
| 20 |
| 10 |
| 20 |
| 30 |
+-------+
3. อัปเดต: ถ้าเป็น 10 → กลายเป็น 20, มิฉะนั้น → กลายเป็น 10
UPDATE DemoTable SET Value = IF(Value = 10, 20, 10);
4. ผลลัพธ์
SELECT * FROM DemoTable;
+-------+
| Value |
+-------+
| 20 |
| 10 |
| 20 |
| 10 |
| 10 | -- 30 กลายเป็น 10 (เงื่อนไข FALSE)
+-------+
ฟังก์ชัน IF() vs คำสั่ง IF
| ประเภท | ไวยากรณ์ | ใช้ที่ |
|---|---|---|
| Function IF() | IF(cond, true_val, false_val) | ใน SELECT, WHERE, SET, UPDATE |
| Statement IF | IF cond THEN ... ELSE ... END IF; | ใน Stored Program (Procedure, Trigger, Function) |
ตัวอย่างเพิ่มเติม
หลายเงื่อนไข: ใช้ CASE (อ่านง่ายกว่า IF 巢狀)
UPDATE DemoTable
SET Status = CASE
WHEN Score >= 90 THEN 'A'
WHEN Score >= 80 THEN 'B'
WHEN Score >= 70 THEN 'C'
WHEN Score >= 60 THEN 'D'
ELSE 'F'
END;
อัปเดตหลายคอลัมน์พร้อมกัน
UPDATE DemoTable
SET
Value = IF(Value = 10, 20, 10),
UpdatedAt = NOW(),
UpdatedBy = USER();
ใช้กับ NULL
-- NULL ไม่เท่ากับ 10 จะเข้า FALSE branch
UPDATE DemoTable SET Value = IF(Value = 10, 20, 10);
-- NULL → 10
ประสิทธิภาพ
- UPDATE แบบ Full Table Scan (ไม่มี WHERE) - ช้าในตารางใหญ่
- เพิ่ม WHERE เพื่อจำกัดขอบเขต:
WHERE Value IN (10, 20, 30) - มี Index บนคอลัมน์ที่ Filter จะเร็วขึ้น
สรุป
ใช้ IF(condition, true_val, false_val) ใน UPDATE เพื่อตั้งค่า 2 แบบตามเงื่อนไข เหมาะกับการ Toggle ค่า, Swap ค่า, หรือ Map ค่าเก่า→ใหม่