SQL eliminar múltiples valores) si mismo identificador tiene un valor NULL asociado
-
26-09-2019 - |
Pregunta
Ok aquí va:
Tengo una tabla con id (puede ser duplicado, pero no es NULL) y el valor (puede ser duplicado y NULL)
id value
----- -----
1 red
1 red
1 (null)
2 blue
2 blue
3 (null)
Entonces, ¿cómo puedo devolver el los registros que tienen un valor, pero si también se encuentra un valor nulo no es necesario incluirla en el conjunto de resultados de Identificación y el valor del lugar.
Así que el regreso sería
id value
----- -----
2 blue
como ID 1 y 3 tienen un valor de (null) en uno o más de los resultados
Solución
Es un típico "Seleccionar el lugar donde no existe" consulta de tipo con muchas formas de escribir la respuesta, por ejemplo:
El uso de un LEFT JOIN / DONDE ... IS NULL:
SELECT DISTINCT T1.id, T1.value
FROM your_table T1
LEFT JOIN your_table T2
ON T1.id = T2.id AND T2.value IS NULL
WHERE T2.id IS NULL
Uso NO EN:
SELECT DISTINCT id, value
FROM your_table
WHERE id NOT IN
(
SELECT DISTINCT id
FROM your_table
WHERE value IS NULL
)
El uso de NO EXISTE:
SELECT DISTINCT id, value
FROM your_table
WHERE NOT EXISTS
(
SELECT NULL
FROM your_table T1
WHERE your_table.id = T1.id AND T1.value IS NULL
)
Otros consejos
select t1.id, t1.value
from MyTable t1
left outer join MyTable t2 on t1.id = t2.id and t2.value is null
where t2.id is null
group by t1.id, t1.value
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow