COALESCE(v1, v2, ..., vn) 回傳參數列表中第一個非 NULL的值,全 NULL 時回傳 NULL。是處理可為 NULL 欄位預設值的標準寫法,符合 ANSI SQL 標準,跨資料庫可移植。
SELECT COALESCE(NULL, NULL, 1); -- 1
SELECT COALESCE(NULL, NULL, NULL); -- NULL
SELECT COALESCE(col_a, col_b, 'N/A') FROM t; -- 依序取第一個非 NULL
| 場景 | SQL 範例 | 說明 |
|---|---|---|
| 顯示聯絡方式優先序 | COALESCE(mobile, phone, email, '未提供') | 行動電話 → 市話 → Email → 固定字串 |
| 數值欄位 NULL 視為 0 參與運算 | SELECT COALESCE(discount, 0) * price FROM orders; | 避免 NULL 導致整式結果為 NULL |
| 分頁查詢游標預設值 | WHERE id > COALESCE(@last_id, 0) | 首頁無游標時從 0 開始 |
| 動態 SQL 條件組裝 | WHERE status = COALESCE(?, status) | 參數為 NULL 時忽略該條件 |
| 函數 | 參數數 | 標準 | 效能 | 備註 |
|---|---|---|---|---|
COALESCE | N (≥2) | ANSI SQL | 極佳 | 首選,可移植 |
IFNULL | 2 | MySQL 專有 | 極佳 | 簡單雙參數略快 |
CASE WHEN v IS NOT NULL THEN v ELSE def END | N | ANSI SQL | 稍慢 | 複雜邏輯才需用 |
最佳實務:預設值處理優先用 COALESCE,簡潔、標準、可讀性高。