2010-01-27 5 views

Odpowiedz

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

jednak pamiętać , w porównaniu do zapytania OR zapytanie będzie znacznie bardziej efektywne, jeśli kolumna zostanie zindeksowana:

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

Spowoduje to użycie ścieżki dostępu do indeksu ref_or_null.

Jeśli trzeba wybrać z listy wartości wraz z NULLs, wystarczy umieścić wartości wszystkich nie-zerowych na listę i dodać pojedynczy OR IS NULL warunek:

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

To będzie używać indeksu na col jako dobrze.

+0

Zostawiłem to ze zwięzłości, ale w praktyce moje zapytanie brzmiało: wybierz * z tabeli, gdzie col IN ("", NULL, "a", "b", "c", "kilka dodatkowych opcji") ; czy to nadal poprawnie używa indeksu? (col w (lista) lub IS NULL) – pvgoddijn

+0

'@ pvgoddjin': tak, będzie. – Quassnoi

+0

Czy użyje indeksu w przypadku, gdy NULL jest wewnątrz IN() lub tylko gdy NULL jest ORed z IN()? – Henno

Powiązane problemy