2010-01-27 3 views

Répondre

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

Notez cependant , que OR requête sera beaucoup plus efficace si la colonne est indexée:

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

Ceci utilisera le chemin d'accès ref_or_null sur l'index.

Si vous devez choisir parmi une liste de valeurs avec NULLs, il suffit de mettre toutes les valeurs non NULL dans la liste et ajouter une seule OR IS NULL état:

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

Cela utilisera un index sur col comme bien.

+0

je l'ai omis de conscience, mais dans la pratique ma requête serait: sélectionnez * de la table où col IN ("", NULL, "a", "b", "c", "quelques autres options") ; Serait-ce encore correctement en utilisant un index? (col dans (liste) ou IS NULL) – pvgoddijn

+0

'@ pvgoddjin': oui, ce sera le cas. – Quassnoi

+0

Utilise-t-il l'index dans le cas où NULL est dans IN() ou seulement quand NULL est OUed avec IN()? – Henno

Questions connexes