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

MySQL UPDATE เฉพาะคอลัมน์ที่เป็น NULL ด้วย COALESCE()

ใช้ COALESCE() ในคำสั่ง UPDATE เพื่อกำหนดค่าใหม่ให้คอลัมน์ที่เป็น NULL โดยอิงจากคอลัมน์อื่น (Fallback Value)

ตัวอย่างการใช้งาน

1. สร้างตาราง

mysql> CREATE TABLE DemoTable1805 (
    Name1 VARCHAR(20),
    Name2 VARCHAR(20)
);
Query OK, 0 rows affected (0.00 sec)

2. เพิ่มข้อมูล (มี NULL)

mysql> INSERT INTO DemoTable1805 VALUES('Chris', NULL);
mysql> INSERT INTO DemoTable1805 VALUES('David', 'Mike');
mysql> INSERT INTO DemoTable1805 VALUES(NULL, 'Mike');

3. แสดงข้อมูลก่อนอัปเดต

mysql> SELECT * FROM DemoTable1805;
+-------+-------+
| Name1 | Name2 |
+-------+-------+
| Chris | NULL  |
| David | Mike  |
| NULL  | Mike  |
+-------+-------+

4. UPDATE: ตั้ง Name1 = COALESCE(Name1, Name2)

mysql> UPDATE DemoTable1805 SET Name1 = COALESCE(Name1, Name2);
Query OK, 1 row affected (0.00 sec)
Rows matched: 3  Changed: 1  Warnings: 0

การทำงาน:

  • แถว 1: Name1='Chris' (NOT NULL) → COALESCE คืน 'Chris' → ไม่เปลี่ยน
  • แถว 2: Name1='David' (NOT NULL) → COALESCE คืน 'David' → ไม่เปลี่ยน
  • แถว 3: Name1=NULL → COALESCE คืน Name2='Mike' → อัปเดตเป็น 'Mike'

5. ผลลัพธ์หลังอัปเดต

mysql> SELECT * FROM DemoTable1805;
+-------+-------+
| Name1 | Name2 |
+-------+-------+
| Chris | NULL  |
| David | Mike  |
| Mike  | Mike  |
+-------+-------+

COALESCE vs IFNULL

ตัวอย่าง COALESCE หลายระดับ

UPDATE users
SET display_name = COALESCE(nickname, first_name, last_name, email, 'Anonymous')
WHERE display_name IS NULL;

สรุป

COALESCE(col1, col2, ...) คืนค่าแรกที่ NOT NULL ใช้ใน UPDATE SET col = COALESCE(col, fallback_col) เพื่อเติมค่า NULL ด้วยค่าจากคอลัมน์อื่น หรือค่าคงที่ แค่ 1 Statement ไม่ต้อง WHERE ซับซ้อน

ฟังก์ชันรองรับอาร์กิวเมนต์Standardตัวอย่าง
COALESCE(v1, v2, v3, ...)2 ตัวขึ้นไป (Unlimited)ANSI SQLCOALESCE(a, b, c, 'default')
IFNULL(v1, v2)2 ตัวเท่านั้นMySQL SpecificIFNULL(a, b)