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

Khi nào CASE statement trong MySQL trả về NULL?

CASE trả về NULL khi:

  1. Không có điều kiện nào khớp (WHEN...THEN)
  2. VÀ không có mệnh đề ELSE

Ví dụ 1: CASE đơn giản không ELSE

mysql> SELECT CASE 100 
    WHEN 150 THEN 'It is matched' 
    WHEN 200 THEN 'It is not matched' 
    END AS 'It Returns NULL';
+-----------------+
| It Returns NULL |
+-----------------+
| NULL            |
+-----------------+

100 không khớp 150 hay 200, không có ELSE → NULL.

Ví dụ 2: CASE tìm kiếm (searched CASE) trên bảng Students

mysql> SELECT 
    SUM(CASE WHEN country = 'USA' THEN 1 ELSE 0 END) AS USA,
    SUM(CASE WHEN country = 'UK' THEN 1 ELSE 0 END) AS UK,
    SUM(CASE WHEN country = 'INDIA' THEN 1 ELSE 0 END) AS INDIA,
    SUM(CASE WHEN country = 'Russia' THEN 1 ELSE 0 END) AS Russia,
    SUM(CASE WHEN country = 'France' THEN 1 ELSE 0 END) AS France,
    SUM(CASE WHEN country = 'NZ' THEN 1 ELSE 0 END) AS NZ,
    SUM(CASE WHEN country = 'Australia' THEN 1 ELSE 0 END) AS Australia,
    SUM(CASE WHEN country = 'WI' THEN 1 END) AS WI  -- KHÔNG CÓ ELSE
FROM Students;

Kết quả

+------+------+-------+--------+--------+------+-----------+------+
| USA  | UK   | INDIA | Russia | France | NZ   | Australia | WI   |
+------+------+-------+--------+--------+------+-----------+------+
| 2    | 1    | 2     | 1      | 1      | 1    | 1         | NULL |
+------+------+-------+--------+--------+------+-----------+------+

Cột WI trả về NULL vì không có học sinh nào từ 'WI' và CASE không có ELSE. Các cột khác có ELSE 0 nên trả 0 thay vì NULL.

Best practice: Luôn thêm ELSE (thường là 0 hoặc giá trị mặc định) để tránh NULL không mong muốn.