การเตรียมข้อมูล
mysql> CREATE TABLE DemoTable1863 (FirstName VARCHAR(20));
mysql> INSERT INTO DemoTable1863 VALUES('Chris'), (NULL), ('David'), (NULL);
ข้อมูลก่อน
+-----------+
| FirstName |
+-----------+
| Chris |
| NULL |
| David |
| NULL |
+-----------+
ใช้ COALESCE ตั้งค่า Default
mysql> SELECT COALESCE(FirstName, 'UNKNOWN NAME') FROM DemoTable1863;
ผลลัพธ์:
+------------------------------------+
| coalesce(FirstName,'UNKNOWN NAME') |
+------------------------------------+
| Chris |
| UNKNOWN NAME |
| David |
| UNKNOWN NAME |
+------------------------------------+
COALESCE vs IFNULL
-- IFNULL: 2 พารามิเตอร์ (MySQL Only)
SELECT IFNULL(FirstName, 'UNKNOWN NAME') FROM DemoTable1863;
-- COALESCE: หลายพารามิเตอร์ (Standard SQL)
SELECT COALESCE(FirstName, MiddleName, LastName, 'UNKNOWN') FROM users;
การตั้งค่า Default แบบถาวร (Schema Level)
ถ้าต้องการ Default จริงในตาราง:
-- ตอนสร้างตาราง
CREATE TABLE users (
name VARCHAR(50) NOT NULL DEFAULT 'Anonymous'
);
-- หรือ ALTER ตารางมีอยู่
ALTER TABLE users ALTER COLUMN name SET DEFAULT 'Anonymous';
-- หมายเหตุ: DEFAULT ไม่ผลักดันค่า NULL ที่มีอยู่แล้ว
-- ต้อง UPDATE แยก: UPDATE users SET name = 'Anonymous' WHERE name IS NULL;
กรณีใช้งาน COALESCE
- แสดงผล Report: แทน NULL ด้วยข้อความอ่านง่าย
- Fallback Chain:
COALESCE(phone, email, 'No contact') - คำนวณ:
COALESCE(bonus, 0) + salaryป้องกัน NULL Propagation - JSON:
COALESCE(JSON_EXTRACT(doc, '$.field'), 'default')