SQL eleminate mulitple Wert (e), wenn dieselbe Kennung einen zugehörigen Wert NULL
-
26-09-2019 - |
Frage
Ok hier geht:
Ich habe eine Tabelle mit der ID (kann doppelte sein, aber nicht NULL) und Wert (kann doppelte und NULL sein)
id value
----- -----
1 red
1 red
1 (null)
2 blue
2 blue
3 (null)
So wie kehre ich die IDs und Wert aller Datensätze, die einen Wert haben, aber wenn ein Nullwert umfassen auch gefunden wird es nicht in der Ergebnismenge.
So ist die Rückkehr wäre
id value
----- -----
2 blue
als ID-1 und 3 haben einen Wert (null) in einer oder mehreren der Ergebnisse
Lösung
Es ist ein typischer „wählen, wo nicht vorhanden ist“ -Typ Abfrage mit vielen Möglichkeiten, um die Antwort zu schreiben, zum Beispiel:
Mit einem LEFT JOIN / WHERE ... 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
Mit NICHT IN:
SELECT DISTINCT id, value
FROM your_table
WHERE id NOT IN
(
SELECT DISTINCT id
FROM your_table
WHERE value IS NULL
)
Mit NICHT VORHANDEN:
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
)
Andere Tipps
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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow