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

Sử dụng CASE WHEN column1 IS NULL THEN NULL ELSE column2 END trong MySQL

Giới thiệu

Biểu thức CASE WHEN cho phép logic điều kiện phức tạp trong SELECT. Ví dụ: Trả về NULL nếu cột A là NULL, ngược lại trả về cột B.

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

mysql> create table DemoTable (
    -> Name varchar(20),
    -> Marks1 int,
    -> Marks2 int
    -> ); 
Query OK, 0 rows affected (0.72 sec)

mysql> insert into DemoTable values('Chris',45,null); 
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('David',null,78); 
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Bob',67,98); 
Query OK, 1 row affected (0.14 sec)

2. Dữ liệu gốc

mysql> select *from DemoTable;
+-------+--------+--------+
| Name  | Marks1 | Marks2 |
+-------+--------+--------+
| Chris |     45 |   NULL |
| David |   NULL |     78 |
| Bob   |     67 |     98 |
+-------+--------+--------+
3 rows in set (0.00 sec)

3. Truy vấn CASE WHEN

mysql> select *, 
    -> (case when Marks1 is null then null else Marks2 end) as Value
    -> from DemoTable;

4. Kết quả

+-------+--------+--------+-------+
| Name  | Marks1 | Marks2 | Value |
+-------+--------+--------+-------+
| Chris |     45 |   NULL |  NULL |
| David |   NULL |     78 |  NULL |
| Bob   |     67 |     98 |    98 |
+-------+--------+--------+-------+
3 rows in set (0.00 sec)

Giải thích:

  • Chris: Marks1=45 (không NULL) → trả về Marks2=NULL
  • David: Marks1=NULL → trả về NULL (không quan tâm Marks2)
  • Bob: Marks1=67 → trả về Marks2=98

Cú pháp CASE đầy đủ:

CASE 
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE default_result
END

Hàm tiện ích tương đương: IF(Marks1 IS NULL, NULL, Marks2) hoặc NULLIF(Marks1, NULL) (không chính xác). MySQL cũng có COALESCE nhưng dùng cho trường hợp khác.