COALESCE(val1, val2, val3, ...)
返回參數列表中 **第一個非 NULL** 的值;**全 NULL 返回 NULL**。
SELECT COALESCE(NULL, NULL, 1); -- → 1
SELECT COALESCE(NULL, NULL, NULL, NULL, 1); -- → 1
SELECT COALESCE(NULL, NULL, NULL); -- → NULL
業務表字段 `discount` 允許 NULL,查詢時需展示為 0:
-- 傳統寫法 (冗長)
SELECT IF(discount IS NULL, 0, discount) AS discount FROM orders;
-- COALESCE 寫法 (優雅、標準 SQL)
SELECT COALESCE(discount, 0) AS discount FROM orders;
-- 優先級:用戶設定 > 部門設定 > 系統默認 > 0
SELECT COALESCE(user_conf, dept_conf, sys_conf, 0) AS final_conf
FROM settings;
-- 若任一字段 NULL,CONCAT 結果全 NULL
SELECT CONCAT(first_name, ' ', last_name) FROM users; -- 風險
-- 安全寫法
SELECT CONCAT(COALESCE(first_name, ''), ' ', COALESCE(last_name, '')) FROM users;
-- 無數據時返回 0 而非 NULL
SELECT COALESCE(SUM(amount), 0) FROM orders WHERE user_id = 999;
| 函數 | 參數數 | 標準 | 適用場景 |
|---|---|---|---|
| COALESCE | N (≥2) | ANSI SQL | 多級降級、通用性最強 |
| IFNULL | 2 | MySQL 專有 | 簡單雙值替換,微快 |
| IF(expr, v1, v2) | 3 | MySQL 專有 | 邏輯判斷非 NULL 情況 |
| CASE WHEN | 靈活 | ANSI SQL | 複雜條件分支 |