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

MySQL UPDATE ด้วย AND Operator: อัปเดตเงื่อนไขหลายอย่าง

ใช้ AND ใน SET Clause ของ UPDATE

MySQL อนุนุญาตให้ใช้ Logical Operator (AND, OR) ใน SET clause ได้ โดยเงื่อนไขจะคืนค่า 1 (True) หรือ 0 (False)

ตัวอย่าง: อัปเดต isMarried = 1 ก็ต่อเมื่อ Age=29 AND Id=100

CREATE TABLE DemoTable613 (
    Id INT, Age INT, isMarried TINYINT(1)
);

INSERT INTO DemoTable613 VALUES
(100, 29, 0),
(200, 22, 0),
(300, 30, 1);

Query UPDATE:

UPDATE DemoTable613 
SET isMarried = (Age = 29 AND Id = 100);

ผลลัพธ์:

+------+------+-----------+
| Id   | Age  | isMarried |
+------+------+-----------+
| 100  | 29   | 1         |  -- True AND True = 1
| 200  | 22   | 0         |  -- False AND True = 0
| 300  | 30   | 0         |  -- False AND False = 0
+------+------+-----------+

อธิบายการทำงาน

  • Age = 29 → 1 (True) หรือ 0 (False)
  • Id = 100 → 1 (True) หรือ 0 (False)
  • Age = 29 AND Id = 100 → 1 ก็ต่อเมื่อทั้งคู่เป็น True
  • ผลลัพธ์ 0/1 ถูก Assign ให้ isMarried (TINYINT)

รูปแบบที่อ่านง่ายกว่า: ใช้ CASE

UPDATE DemoTable613
SET isMarried = CASE 
    WHEN Age = 29 AND Id = 100 THEN 1
    ELSE 0
END;

กรณีใช้งานจริง: Conditional Update หลายเงื่อนไข

-- อัปเดต Status ตามหลายเงื่อนไข
UPDATE orders
SET status = CASE
    WHEN paid = 1 AND shipped = 1 THEN 'completed'
    WHEN paid = 1 AND shipped = 0 THEN 'processing'
    WHEN paid = 0 THEN 'pending_payment'
    ELSE status
END,
updated_at = NOW()
WHERE id IN (1,2,3,4,5);

ข้อควรระวัง

  1. Boolean Evaluation: MySQL แปลง Boolean เป็น 1/0 อัตโนมัติ - เหมาะกับ TINYINT/INT
  2. NULL Handling: เงื่อนไขที่มี NULL จะได้ NULL (ไม่ใช่ 0) - ใช้ COALESCE หรือ IFNULL กันไว้
  3. WHERE Clause: ควรมี WHERE เพื่อจำกัด Scope ไม่ให้ Update ทั้งตาราง

ตัวอย่างปลอดภัยกับ NULL

UPDATE DemoTable613
SET isMarried = COALESCE((Age = 29 AND Id = 100), 0);