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

War es hilfreich?

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