2010-01-27 5 views

Antwort

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

Beachten Sie jedoch , als OR Abfrage wird viel effizienter sein, wenn die Spalte indiziert ist:

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

Dies wird ref_or_null Zugriffspfad auf den Index verwenden.

Wenn Sie aus einer Liste von Werten zusammen mit NULLs auswählen müssen, setzen Sie einfach alle nicht-NULL-Werte in der Liste und fügen Sie einen einzigen OR IS NULL Zustand:

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

Dies wird einen Index für col verwenden als Gut.

+0

Ich habe es aus der Konsequenz herausgelassen, aber in der Praxis wäre meine Abfrage: Wählen * aus Tabelle wo col IN ("", NULL, "a", "b", "c", "ein paar mehr Optionen") ; würde dies immer noch korrekt mit einem Index? (Spalte in (Liste) oder IS NULL) – pvgoddijn

+0

'@ pvgoddjin': ja, wird es. – Quassnoi

+0

Wird der Index verwendet, wenn NULL innerhalb von IN() oder nur dann ist, wenn NULL mit IN() verknüpft ist? – Henno

Verwandte Themen