2010-01-27 10 views

Respuesta

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

Nótese, sin embargo , que la consulta OR será mucho más eficiente si la columna está indexada:

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

Esto utilizará la ruta de acceso ref_or_null en el índice.

Si necesita seleccionar de una lista de valores, junto con NULLs, sólo hay que poner todos los valores no nulos en la lista y añadir una sola OR IS NULL condición:

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

Esto utilizará un índice en col como bien.

+0

lo dejé fuera de la congestión, pero en la práctica mi consulta sería: seleccionar * de la tabla donde col IN ("", NULL, "a", "b", "c", "algunas opciones más") ; ¿Sería esto así utilizando correctamente un índice? (col in (list) or IS NULL) – pvgoddijn

+0

'@ pvgoddjin': sí, lo hará. – Quassnoi

+0

¿Utilizará el índice en el caso de que NULL esté dentro de IN() o solo cuando NULL esté ORed con IN()? – Henno

Cuestiones relacionadas