2011-05-06 11 views

Respuesta

14

utilizar el operador IFNULL

WHERE IFNULL(xxx, '') LIKE '%' 
1

Esta instrucción devuelve todas las filas SALVO filas que tienen NULL en column1

SELECT * FROM table WHERE column1 LIKE '%' 

Para obtener todas las filas que incluyen filas con NULL en columna 1, utilice este :

SELECT * FROM table WHERE IFNULL(column1,1) LIKE '%' 

de la documentación de MySQL:

IFNULL (expr1, expr2)

Si expr1 no es NULL, IFNULL() devuelve expr1; de lo contrario, devuelve expr2. IFNULL() devuelve un valor numérico o de cadena, según el contexto en el que se utiliza.

Hay una advertencia sin embargo: Si usted tiene un índice en column1, no va a ser utilizado en esta consulta, por lo que las cosas podrían ser lenta en las tablas más grandes ...

2

Si desea column1 COMO '%' y quiere que la columna 1 ES NULA, ¿por qué no simplemente descartar la cláusula WHERE?

Probar:

SELECT * FROM TABLE; 

Esto es lo que he intentado:

mysql> create table foo (a char(30)); 
Query OK, 0 rows affected (0.02 sec) 

mysql> insert into foo values (''); 
Query OK, 1 row affected (0.01 sec) 

mysql> insert into foo values (NULL); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from foo; 
+------+ 
| a | 
+------+ 
|  | 
| NULL | 
+------+ 
2 rows in set (0.00 sec) 

mysql> select * from foo where a like '%' or a is null; 
+------+ 
| a | 
+------+ 
|  | 
| NULL | 
+------+ 
2 rows in set (0.00 sec) 

mysql> select * from foo where ifnull (a, 1) like '%'; 
+------+ 
| a | 
+------+ 
|  | 
| NULL | 
+------+ 
2 rows in set (0.00 sec) 

mysql> 

Después de todo, IFNULL (columna 1, 1) COMO '%' es efectivamente un no-op ...

0

Use COALESCE en lugar de IFNULL si desea usarlo con java createQuery

WHERE COALESCE (xxx, '') LIKE '%' 
Cuestiones relacionadas