SQL eliminare valori multipli) se stesso identificatore ha un valore NULL associato
-
26-09-2019 - |
Domanda
Ok qui va:
Ho una tabella con id (può essere duplicato, ma non NULL) e del valore (può essere duplicato e NULL)
id value
----- -----
1 red
1 red
1 (null)
2 blue
2 blue
3 (null)
Quindi, come faccio a restituire il record che hanno un valore, ma se si trova anche un valore nullo non includono nel set di risultati di id e il valore di tutti.
Quindi, il ritorno sarebbe stato
id value
----- -----
2 blue
come id 1 e 3 hanno un valore di (null) in uno o più dei risultati
Soluzione
E 'un tipico "scegliere dove non esiste" query di tipo con molti modi per scrivere la risposta, ad esempio:
Utilizzando un LEFT JOIN / DOVE ... 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
Utilizzando NON IN:
SELECT DISTINCT id, value
FROM your_table
WHERE id NOT IN
(
SELECT DISTINCT id
FROM your_table
WHERE value IS NULL
)
Utilizzando NON ESISTE:
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
)
Altri suggerimenti
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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow