significa - select if is not null mysql
MySQL SELECT solo no valores nulos (8)
¿Es posible hacer una declaración de selección que tome solo valores NOT NULL?
Ahora mismo estoy usando esto:
SELECT * FROM table
Y luego tengo que filtrar los valores nulos con un bucle php.
¿Hay una manera de hacer:
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?
Encontré esta solución:
Esta consulta selecciona último valor no nulo para cada columna.
Ejemplo
Si tienes una mesa:
id|title|body
1 |t1 |b1
2 |NULL |b2
3 |t3 |NULL
usted obtiene:
title|body
t3 |b2
Consulta
SELECT DISTINCT (
SELECT title
FROM test
WHERE title IS NOT NULL
ORDER BY id DESC
LIMIT 1
) title, (
SELECT body
FROM test
WHERE body IS NOT NULL
ORDER BY id DESC
LIMIT 1
) body
FROM test
Espero te ayude
Puede filtrar las filas que contienen un valor NULL en una columna específica:
SELECT col1, col2, ..., coln
FROM yourtable
WHERE somecolumn IS NOT NULL
Si desea filtrar las filas que contienen un nulo en cualquier columna, intente esto:
SELECT col1, col2, ..., coln
FROM yourtable
WHERE col1 IS NOT NULL
AND col2 IS NOT NULL
-- ...
AND coln IS NOT NULL
Actualización: Basado en tus comentarios, tal vez quieres esto?
SELECT * FROM
(
SELECT col1 AS col FROM yourtable
UNION
SELECT col2 AS col FROM yourtable
UNION
-- ...
UNION
SELECT coln AS col FROM yourtable
) T1
WHERE col IS NOT NULL
Y estoy de acuerdo con Martin en que si necesita hacer esto, probablemente deba cambiar el diseño de su base de datos.
Sí, use NOT NULL
en su consulta como esta a continuación.
SELECT *
FROM table
WHERE col IS NOT NULL;
Siguiendo consulta trabajando para mi
cuando haya establecido el valor predeterminado de la columna ''NULL'' entonces
select * from table where column IS NOT NULL
y cuando he establecido el valor predeterminado nada, entonces
select * from table where column <>''''
Usted debe utilizar IS NOT NULL
. (Los operadores de comparación =
y <>
ambos dan UNKNOWN
con NULL
a cada lado de la expresión).
SELECT *
FROM table
WHERE YourColumn IS NOT NULL;
Solo para completar, mencionaré que en MySQL también puede negar el operador nulo de igualdad segura, pero este no es el estándar de SQL.
SELECT *
FROM table
WHERE NOT (YourColumn <=> NULL);
Editado para reflejar los comentarios. Parece que su mesa puede no estar en su primera forma normal, en cuyo caso, cambiar la estructura puede facilitar su tarea. Un par de otras maneras de hacerlo aunque ...
SELECT val1 AS val
FROM your_table
WHERE val1 IS NOT NULL
UNION ALL
SELECT val2
FROM your_table
WHERE val2 IS NOT NULL
/*And so on for all your columns*/
La desventaja de lo anterior es que escanea la tabla varias veces una vez para cada columna. Esto posiblemente se puede evitar con el siguiente, pero no he probado esto en MySQL.
SELECT CASE idx
WHEN 1 THEN val1
WHEN 2 THEN val2
END AS val
FROM your_table
/*CROSS JOIN*/
JOIN (SELECT 1 AS idx
UNION ALL
SELECT 2) t
HAVING val IS NOT NULL /*Can reference alias in Having in MySQL*/
Yo uso el /!
comando dentro de MySQL para obtener valores NULL desde el shell:
/! mysql -e "SELECT * FROM table WHERE column = 123456/G" | grep -v NULL
Funciona mejor con un .my.cnf
adecuado donde se especifican su base de datos / nombre de usuario / contraseña. De esa manera solo tienes que rodear tu select
con /! mysql e
/! mysql e
y | grep -v NULL
| grep -v NULL
.
SELECT * FROM TABLE_NAME
where COLUMN_NAME <> '''';
Select * from your_table
WHERE col1 and col2 and col3 and col4 and col5 IS NOT NULL;
La única desventaja de este enfoque es que solo puede comparar 5 columnas, después de eso el resultado siempre será falso, así que solo comparo los campos que pueden ser NULL
.