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

Triển khai 2 điều kiện cho 1 cột: NULL và rỗng trong MySQL

Vấn đề

Lọc bỏ cả giá trị NULL và chuỗi rỗng '' khỏi kết quả truy vấn.

Ví dụ

Tạo bảng:

CREATE TABLE DemoTable635 (
    EmployeeId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    EmployeeName VARCHAR(100)
);
INSERT INTO DemoTable635(EmployeeName) VALUES
('John'), ('Sam'), (''), (NULL), ('David');

Truy vấn loại trừ NULL và rỗng:

SELECT * FROM DemoTable635
WHERE EmployeeName IS NOT NULL
  AND EmployeeName <> '';

Kết quả:

+-----------+--------------+
| EmployeeId | EmployeeName |
+-----------+--------------+
| 1         | John         |
| 2         | Sam          |
| 5         | David        |
+-----------+--------------+

Các cách viết tương đương

-- Cách 1: IS NOT NULL + <> '' (chuẩn, rõ ràng)
WHERE EmployeeName IS NOT NULL AND EmployeeName <> ''

-- Cách 2: COALESCE + <> ''
WHERE COALESCE(EmployeeName, '') <> ''

-- Cách 3: LENGTH > 0 (NULL → NULL, '' → 0, 'a' → 1)
WHERE LENGTH(EmployeeName) > 0

-- Cách 4: TRIM + <> '' (cũng loại bỏ whitespace-only)
WHERE TRIM(EmployeeName) <> ''

-- Cách 5: NOT IN (NULL, '') - CẨN THẬN: NOT IN với NULL trả về UNKNOWN
-- KHÔNG KHUYẾN NGHỊ: WHERE EmployeeName NOT IN (NULL, '')

So sánh

CáchXử lý NULLXử lý ''Xử lý ' 'Dùng index
IS NOT NULL AND <> ''✓✓✗ (giữ nguyên)Có (nếu không function)
COALESCE(col,'') <> ''✓✓✗Khó (function)
LENGTH(col) > 0✓ (NULL→NULL)✓✗Khó
TRIM(col) <> ''✓✓✓ (loại bỏ)Khó

Best Practice

  • Dùng IS NOT NULL AND col <> '' cho WHERE clause (index friendly).
  • Dùng TRIM(col) <> '' cho data cleaning (loại cả whitespace-only).
  • Tạo CHECK CONSTRAINT (MySQL 8.0.16+): CHECK (EmployeeName IS NOT NULL AND EmployeeName <> '').
  • Định nghĩa cột: EmployeeName VARCHAR(100) NOT NULL DEFAULT '' để tránh NULL từ đầu.