SQL eliminar múltiples valores) si mismo identificador tiene un valor NULL asociado

StackOverflow https://stackoverflow.com/questions/3415959

  •  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

¿Fue útil?

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
scroll top