ใช้ 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);
ข้อควรระวัง
- Boolean Evaluation: MySQL แปลง Boolean เป็น 1/0 อัตโนมัติ - เหมาะกับ TINYINT/INT
- NULL Handling: เงื่อนไขที่มี NULL จะได้ NULL (ไม่ใช่ 0) - ใช้
COALESCEหรือIFNULLกันไว้ - WHERE Clause: ควรมี WHERE เพื่อจำกัด Scope ไม่ให้ Update ทั้งตาราง
ตัวอย่างปลอดภัยกับ NULL
UPDATE DemoTable613
SET isMarried = COALESCE((Age = 29 AND Id = 100), 0);