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

อัปเดตค่าทั้งตารางเป็น 2 ค่า ตามเงื่อนไขด้วย IF() ใน MySQL

ภาพรวม

ใช้ 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 IFIF 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 ค่าเก่า→ใหม่