2010-01-27 26 views

Trả lời

28
SELECT * 
FROM mytable 
WHERE COALESCE(col, '') = '' 

Lưu ý, tuy nhiên , hơn OR truy vấn sẽ hiệu quả hơn nhiều nếu cột được lập chỉ mục:

SELECT * 
FROM mytable 
WHERE col = '' OR col IS NULL 

Điều này sẽ sử dụng đường dẫn truy cập ref_or_null trên chỉ mục.

Nếu bạn cần phải lựa chọn từ một danh sách các giá trị cùng với NULLs, chỉ cần đặt giá trị tất cả không rỗng vào danh sách và thêm một đơn OR IS NULL điều kiện:

SELECT * 
FROM mytable 
WHERE col IN ('val1', 'val2', 'val3') OR col IS NULL 

này sẽ sử dụng một chỉ mục trên col như tốt.

+0

tôi bỏ nó ra khỏi sự cân bằng, nhưng trong thực tế truy vấn của tôi sẽ là: chọn * từ bảng nơi col IN (", NULL," a "," b "," c "," vài tùy chọn khác ") ; điều này sẽ vẫn chính xác khi sử dụng chỉ mục? (col trong (danh sách) hoặc IS NULL) – pvgoddijn

+0

'@ pvgoddjin': có, nó sẽ. – Quassnoi

+0

Nó sẽ sử dụng chỉ số trong trường hợp NULL là bên trong IN() hoặc chỉ khi NULL là ORed với IN()? – Henno

Các vấn đề liên quan