Để lọc bản ghi dựa trên điều kiện phức tạp liên quan đến NULL và so sánh giá trị trên nhiều cột, bạn kết hợp IS NULL với != trong mệnh đề WHERE dùng AND/OR.
Ví dụ minh họa
Tạo bảng 3 cột:
mysql> create table DemoTable (
value1 int,
value2 int,
value3 int
);
Chèn dữ liệu:
mysql> insert into DemoTable values(20,40,null); mysql> insert into DemoTable values(40,40,null); mysql> insert into DemoTable values(null,null,null);
Hiển thị dữ liệu:
mysql> select * from DemoTable;
Kết quả:
+--------+--------+--------+ | value1 | value2 | value3 | +--------+--------+--------+ | 20 | 40 | NULL | | 40 | 40 | NULL | | NULL | NULL | NULL | +--------+--------+--------+
Truy vấn lọc: (value1 IS NULL OR !=20) AND (value2 IS NULL OR !=20) AND (value3 IS NULL OR !=20)
mysql> select * from DemoTable where (value1 is null or value1!=20) and (value2 is null or value2!=20) and (value3 is null or value3!=20);
Kết quả:
+--------+--------+--------+ | value1 | value2 | value3 | +--------+--------+--------+ | 40 | 40 | NULL | | NULL | NULL | NULL | +--------+--------+--------+
Giải thích logic từng hàng:
- Hàng 1 (20,40,NULL): value1=20 →
value1!=20FALSE,value1 IS NULLFALSE → cả cụm 1 FALSE → loại - Hàng 2 (40,40,NULL): value1=40≠20 TRUE, value2=40≠20 TRUE, value3 NULL TRUE → tất cả TRUE → giữ
- Hàng 3 (NULL,NULL,NULL): 3 cột đều NULL → 3 cụm IS NULL TRUE → giữ
Mẫu này dùng cho: lọc dữ liệu "khác một giá trị cụ thể HOẶC là NULL" trên nhiều cột cùng lúc.