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

การอัปเดตฟิลด์ต่างกันตามเงื่อนไขใน MySQL ด้วย IF

ใน 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)
ความยืดหยุ่นจำกัดสูง
อ่านง่ายดีสำหรับเงื่อนไขเดียวดีสำหรับหลายเงื่อนไข
มาตรฐาน SQLMySQL SpecificANSI SQL Standard

กรณีการใช้งานจริง

  • อัปเดตสถานะออเดอร์ตามเงื่อนไขหลายขั้น (Pending → Processing → Shipped)
  • คำนวณส่วนลดตามยอดซื้อ/สมาชิก/โปรโมชั่น
  • จัดกลุ่มลูกค้าตามพฤติกรรม (RFM Analysis)
  • Normalize ข้อมูลที่มีความไม่สม่ำเสมอ