¿Es posible hacer una declaración select que solo tome valores NOT NULL?
En este momento estoy usando esto:
SELECT * FROM table
Y luego tengo que filtrar los valores nulos con un bucle php.
¿Hay alguna manera de hacerlo?
SELECT * (that are NOT NULL) FROM table
?
En este momento, cuando selecciono *, obtengo val1, val2, val3, nulo, val4, val5, nulo, nulo, etc ... pero solo quiero obtener los valores que no son nulos en mi resultado. ¿Es esto posible sin filtrar con un bucle?
Respuestas:
Debe utilizar
IS NOT NULL
. (Los operadores de comparación=
y<>
ambos danUNKNOWN
conNULL
a cada lado de la expresión).Solo para completar, mencionaré que en MySQL también puede negar el operador de igualdad segura nula, pero esto no es SQL estándar.
Editado para reflejar los comentarios. Parece que su tabla puede no estar en la primera forma normal, en cuyo caso cambiar la estructura puede facilitar su tarea. Sin embargo, hay un par de otras formas de hacerlo ...
La desventaja de lo anterior es que escanea la tabla varias veces una vez para cada columna. Es posible que esto se pueda evitar a continuación, pero no lo he probado en MySQL.
fuente
CASE
declaración, no unaCASE
función. Entonces, ¿no debería ser enEND CASE
lugar deEND
en laSELECT CASE ...
parte?idx
rom la primeraSELECT
viene deidx
la segundaSELECT
? ¿QuéCASE
intenta lograr la declaración? ¿Qué hace el segundo enSELECT
realidad? Y estás haciendo una unión interna, no una unión cruzada, ¿verdad?SELECT * FROM table WHERE * IS NOT NULL AND primary_key="somevalue"
)Puede filtrar las filas que contienen un valor NULL en una columna específica:
Si desea filtrar las filas que contienen un valor nulo en cualquier columna, intente esto:
Actualización: Según tus comentarios, ¿quizás quieres esto?
Y estoy de acuerdo con Martin en que si necesita hacer esto, entonces probablemente debería cambiar el diseño de su base de datos.
fuente
*
regresa? Tal vez proporcione un poco de datos de ejemplo en su pregunta, ya que no está claro en su comentario anterior si se trata de una columna.La única desventaja de este enfoque es que solo puede comparar 5 columnas, después de eso el resultado siempre será falso, por lo que comparo solo los campos que pueden ser
NULL
.fuente
Encontré esta solución:
Esta consulta selecciona el último valor no nulo para cada columna.
Ejemplo
Si tienes una mesa:
usted obtiene:
Consulta
Espero ayudarte
fuente
Uso el
\!
comando dentro de MySQL para extraer valores NULL del shell:Funciona mejor con un apropiado
.my.cnf
donde se especifique su base de datos / nombre de usuario / contraseña. De esa manera usted solo tiene que rodear elselect
con\! mysql e
y| grep -v NULL
.fuente
La siguiente consulta me funciona
cuando configuré el valor predeterminado de la columna 'NULL'
y cuando he establecido el valor predeterminado nada, entonces
fuente
Sí, use
NOT NULL
en su consulta como esta a continuación.fuente
MYSQL NO ES NULO CON UNIR Y SELECCIONAR, INSERTAR EN, BORRAR Y EL OPERADOR LÓGICO COMO O NO
fuente
fuente