Hàm COALESCE() trả về giá trị đầu tiên KHÔNG NULL trong danh sách. Dùng để gộp 2 cột: nếu cột 1 có giá trị thì lấy cột 1, ngược lại lấy cột 2.
Cú pháp
SELECT COALESCE(cột1, cột2) AS cột_gộp FROM tên_bảng;
Ví dụ minh họa
Tạo bảng demo:
mysql> CREATE TABLE combineTwoColumnsDemo (
-> UserId INT,
-> UserName VARCHAR(20),
-> UserAge INT
-> );
Query OK, 0 rows affected (1.12 sec)
Chèn dữ liệu (có NULL):
mysql> INSERT INTO combineTwoColumnsDemo VALUES
-> (101, 'John', 23), (102, 'Carol', 20), (103, 'Bob', 25), (104, 'Mike', 26),
-> (105, NULL, 23), (105, 'Maxwell', NULL);
Xem dữ liệu gốc:
mysql> SELECT * FROM combineTwoColumnsDemo;
+--------+----------+---------+ | UserId | UserName | UserAge | +--------+----------+---------+ | 101 | John | 23 | | 102 | Carol | 20 | | 103 | Bob | 25 | | 104 | Mike | 26 | | 105 | NULL | 23 | | 105 | Maxwell | NULL | +--------+----------+---------+
Gộp UserName và UserAge (ưu tiên UserName):
mysql> SELECT UserName, UserAge,
-> COALESCE(UserName, UserAge) AS Combine_UserName_UserAge
-> FROM combineTwoColumnsDemo;
+----------+---------+--------------------------+ | UserName | UserAge | Combine_UserName_UserAge | +----------+---------+--------------------------+ | John | 23 | John | | Carol | 20 | Carol | | Bob | 25 | Bob | | Mike | 26 | Mike | | NULL | 23 | 23 | | Maxwell | NULL | Maxwell |
Các trường hợp sử dụng COALESCE
| Mục đích | Ví dụ |
|---|---|
| Giá trị mặc định cho NULL | COALESCE(phone, email, 'Chưa cung cấp') |
| Gộp cột ưu tiên | COALESCE(nickname, fullname, username) |
| Thay thế NULL trong tính toán | price * COALESCE(discount, 0) |
| Chọn cột không NULL đầu tiên | COALESCE(col_a, col_b, col_c) |
COALESCE vs IFNULL vs CASE
COALESCE(a,b,c...): Chuẩn SQL, nhiều đối số, trả về đầu tiên NOT NULLIFNULL(a,b): Chỉ 2 đối số, MySQL proprietaryCASE WHEN a IS NOT NULL THEN a ELSE b END: Linh hoạt nhất
Lưu ý: COALESCE chuyển đổi kiểu dữ liệu về kiểu chung (thường là VARCHAR nếu có chuỗi). Kết quả cột gộp sẽ là kiểu chuỗi.