SQL Eleminate Mulitple Value (s) se o mesmo identificador tiver um valor nulo associado

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

  •  26-09-2019
  •  | 
  •  

Pergunta

Ok, aqui vai:

Eu tenho uma tabela com id (pode ser duplicada, mas não nula) e valor (pode ser duplicado e nulo)

id      value
-----   -----
1       red
1       red
1       (null)
2       blue
2       blue
3       (null)

Então, como retorno os IDs e os valores de todos os registros que têm um valor, mas se um valor nulo também for encontrado, não o inclua no conjunto de resultados.

Então o retorno seria

id      value
-----   -----
2       blue

Como ID 1 e 3 têm um valor de (nulo) em um ou mais dos resultados

Foi útil?

Solução

É uma consulta típica do tipo "Selecionar onde não existe" com muitas maneiras de escrever a resposta, por exemplo:

Usar uma junção esquerda / onde ... é nulo:

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

Usando não em:

SELECT DISTINCT id, value
FROM your_table
WHERE id NOT IN
(
    SELECT DISTINCT id
    FROM your_table
    WHERE value IS NULL
)

Usando não 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
)

Outras dicas

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top