Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Hiển thị giá trị đầu tiên không NULL với COALESCE() trong MySQL

Vấn đề: Lấy giá trị đầu tiên khác NULL từ danh sách cột/biểu thức

Cần trả về StudentName nếu có, nếu NULL thì lấy StudentSubject.

Giải pháp: Hàm COALESCE()

COALESCE(val1, val2, ..., valN) trả về giá trị đầu tiên không NULL. Nếu tất cả NULL → trả NULL.

1. Tạo bảng và dữ liệu

CREATE TABLE DemoTable (
    StudentName VARCHAR(20),
    StudentSubject VARCHAR(20)
);

INSERT INTO DemoTable VALUES
('Chris', 'MySQL'),
('David', NULL),
(NULL, 'MongoDB');

2. Dữ liệu

+-------------+----------------+
| StudentName | StudentSubject |
+-------------+----------------+
| Chris       | MySQL          |
| David       | NULL           |
| NULL        | MongoDB        |
+-------------+----------------+

3. Truy vấn COALESCE

SELECT COALESCE(StudentName, StudentSubject) AS Result 
FROM DemoTable;

4. Kết quả

+---------+
| Result  |
+---------+
| Chris   |
| David   |
| MongoDB |
+---------+

So sánh COALESCE vs IFNULL vs CASE

HàmSố đối sốChuẩn SQLVí dụ
COALESCE2+Có (ANSI)COALESCE(a,b,c)
IFNULL2MySQL onlyIFNULL(a,b)
CASELinh hoạtCóCASE WHEN a IS NOT NULL THEN a ELSE b END

Ứng dụng thực tế

  • Hiển thị tên hiển thị: COALESCE(nickname, fullname, username, 'Guest').
  • Giá trị mặc định cho cột có thể NULL: COALESCE(discount, 0).
  • Trong ORDER BY: ORDER BY COALESCE(priority, 999) – NULL xếp cuối.

Lưu ý

  • COALESCE đánh giá từng đối số theo thứ tự – dừng ở giá trị đầu tiên không NULL (short-circuit).
  • Tất cả đối số nên cùng kiểu dữ liệu (hoặc có thể chuyển đổi ngầm).