2010-01-27 13 views
19

olmadan col IN (null, "") öğesinin bir şekilde Mysql'de boş dizeleri ve NULL değerlerini seçmeden kullanabileceği tablodan * seçin veya?Mysql: OR

bu:

select * from table where col IN (null, ""); 

çalışmıyor, bununla birlikte, null adlı görmezden (ya da muhtemelen dize 'boş'

sayesinde, PV Goddijn

cevap

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

Not ile eşleşir OR sorgusu, sütun dizine eklendiğinde çok daha verimli olacaktır:

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

Bu, dizindeki ref_or_null erişim yolunu kullanacaktır. Bu şekilde col bir dizin kullanacak

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

: Eğer NULLs birlikte bir değerler listesinden seçim gerekiyorsa

, sadece tek OR IS NULL koşul listesine hepsi boş değil değerlerini koymak ve ekleme iyi.

+0

bunu açıklıktan çıkardım, ancak uygulamada sorgum şu olurdu: col IN ("", NULL, "a", "b", "c", "birkaç seçenek daha") tablosundan * seçin ; bu hala bir dizin kullanarak doğru mu? (col (liste) veya IS NULL) – pvgoddijn

+0

'@ pvgoddjin': evet, olacak. – Quassnoi

+0

NULL öğesinin IN() içinde veya yalnızca NULL IN IN() ile ORed? – Henno