Tengo un problema en el que cuando intento seleccionar las filas que tienen un NULL para una determinada columna, devuelve un conjunto vacío. Sin embargo, cuando miro la tabla en phpMyAdmin, dice nulo para la mayoría de las filas.
Mi consulta se parece a esto:
SELECT pid FROM planets WHERE userid = NULL
Conjunto vacío cada vez.
Se dijo que muchos lugares se aseguraban de que no se almacenara como "NULL" o "null" en lugar de un valor real, y uno dijo que intentara buscar solo un espacio ( userid = ' '
) pero ninguno de estos funcionó. Se sugirió no usar MyISAM y usar innoDB porque MyISAM tiene problemas para almacenar null. Cambié la tabla a innoDB, pero ahora siento que el problema puede ser que todavía no es nulo debido a la forma en que podría convertirlo. Me gustaría hacer esto sin tener que recrear la tabla como innoDB o cualquier otra cosa, pero si tengo que hacerlo, ciertamente puedo intentarlo.
Respuestas:
SQL NULL es especial, y tienes que hacerlo
WHERE field IS NULL
, ya que NULL no puede ser igual a nada,incluyéndose a sí mismo (es decir: NULL = NULL siempre es falso).Ver
Rule 3
https://en.wikipedia.org/wiki/Codd%27s_12_rulesfuente
select * from foo where bar <> "abc"
será no devolver filas, donde la barra es nulo. Eso me dejó sin aliento hoy. Los documentos llaman<>
al operador "no es igual a", pero en realidad es el operador "es igual a algo distinto de".fuente
Como todos reciben respuestas, quiero agregar un poco más. También me enfrenté al mismo problema.
¿Por qué falló su consulta? Tienes,
Esto no le dará el resultado esperado, porque desde mysql doc
El énfasis es mío.
Solución
Para probar
NULL
, utilice los operadoresIS NULL
yIS NOT NULL
.NULL
.NULL
.fuente
También hay un
<=>
operador:Trabajaría. Lo bueno es que
<=>
también se puede usar con valores no NULL:SELECT NULL <=> NULL
rendimientos1
.SELECT 42 <=> 42
cede1
también.Ver aquí: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal-to
fuente
Información de http://w3schools.com/sql/sql_null_values.asp :
Entonces, en caso de su problema:
fuente
Tuve el mismo problema donde consulta:
no devolvió valores. Parece ser un problema con MyISAM y la misma consulta sobre los datos en InnoDB devolvió los resultados esperados.
Fue con:
Devuelto todos los resultados esperados.
fuente
fuente
Tuve el mismo problema al convertir bases de datos de Access a MySQL (usando vb.net para comunicarse con la base de datos).
Necesitaba evaluar si un campo (campo tipo varchar (1)) era nulo.
Esta declaración funcionó para mi escenario:
fuente