Bạn nên sử dụng IS NOT NULL
. (Các toán tử so sánh =
và <>
cả hai đều đưa ra UNKNOWN
với NULL
ở một trong hai bên của biểu thức.)
SELECT *
FROM table
WHERE YourColumn IS NOT NULL;
Để hoàn thiện hơn, tôi sẽ đề cập rằng trong MySQL, bạn cũng có thể phủ định toán tử bình đẳng an toàn rỗng nhưng đây không phải là SQL chuẩn.
SELECT *
FROM table
WHERE NOT (YourColumn <=> NULL);
Đã chỉnh sửa để phản ánh ý kiến. Có vẻ như bảng của bạn có thể không ở dạng bình thường đầu tiên, trong trường hợp đó, việc thay đổi cấu trúc có thể làm cho nhiệm vụ của bạn dễ dàng hơn. Tuy nhiên, một số cách khác để làm điều đó ...
SELECT val1 AS val
FROM your_table
WHERE val1 IS NOT NULL
UNION ALL
SELECT val2
FROM your_table
WHERE val2 IS NOT NULL
/*And so on for all your columns*/
Nhược điểm của cách trên là nó quét bảng nhiều lần một lần cho mỗi cột. Điều đó có thể tránh được bằng cách bên dưới nhưng tôi chưa thử nghiệm điều này trong MySQL.
SELECT CASE idx
WHEN 1 THEN val1
WHEN 2 THEN val2
END AS val
FROM your_table
/*CROSS JOIN*/
JOIN (SELECT 1 AS idx
UNION ALL
SELECT 2) t
HAVING val IS NOT NULL /*Can reference alias in Having in MySQL*/