Giới thiệu
Khi truy vấn không trả về hàng nào (Empty set), dùng COALESCE() trên hàm tập hợp (aggregate) để trả về giá trị mặc định thay vì NULL/rỗng.
1. Tạo bảng và dữ liệu
mysql> create table DemoTable (
-> Code varchar(20)
-> );
Query OK, 0 rows affected (1.64 sec)
mysql> insert into DemoTable values('10');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('45');
Query OK, 1 row affected (0.30 sec)
mysql> insert into DemoTable values('78');
Query OK, 1 row affected (0.21 sec)
2. Dữ liệu gốc
mysql> select *from DemoTable;
+------+ | Code | +------+ | 10 | | 45 | | 78 | +------+ 3 rows in set (0.00 sec)
3. Truy vấn không khớp hàng nào (Code='90')
Bình thường:
mysql> select MAX(Code) from DemoTable where Code='90'; +-----------+ | MAX(Code) | +-----------+ | NULL | +-----------+ 1 row in set (0.00 sec)
Dùng COALESCE để thay NULL bằng 'false':
mysql> select COALESCE(MAX(Code), 'false') AS WhenReturnSetIsEmpty
-> from DemoTable
-> where Code='90';
4. Kết quả
+----------------------+ | WhenReturnSetIsEmpty | +----------------------+ | false | +----------------------+ 1 row in set (0.00 sec)
Giải thích:
MAX(Code)trên tập rỗng trả về NULLCOALESCE(val1, val2, ...)trả về giá trị đầu tiên không NULL- Kết quả: 'false' (chuỗi) thay vì NULL
Các trường hợp dùng COALESCE phổ biến:
SELECT COALESCE(column, 'N/A') FROM table: Hiển thị 'N/A' cho cột NULLSELECT COALESCE(price, 0) FROM products: Giá NULL tính là 0COALESCE(col1, col2, col3, 'default'): Ưu tiên cột nào có giá trị
Lưu ý: COALESCE là chuẩn SQL. MySQL cũng có IFNULL(expr1, expr2) (chỉ 2 tham số).