Ich schrieb eine Abfrage, um den Knotentyp aus der Tabelle BST zu finden, geordnet nach dem Wert des Knotens. Tisch, BST, hatte zwei Spalten N und P, wobei N den Wert eines Knotens in BST darstellt, und P ist die Mutter von N. sagen, BST hat folgende Einträge: BST Table"NICHT IN" funktioniert nicht wie erwartet
ich erfolgreich ausgeführt die Abfrage wie folgt:
SELECT n,CASE
WHEN p IS NULL THEN 'Root'
WHEN n IN (SELECT DISTINCT p FROM BST) THEN 'Inner'
ELSE 'Leaf'
END
FROM BST
ORDER BY n;
Ergebnis: Result as expected
Aber statt mit "IN", wenn ich die gleiche Abfrage mit "NOT IN" versuchte, wie unten angegeben:
SELECT n,CASE
WHEN p IS NULL THEN 'Root'
WHEN n NOT IN (SELECT DISTINCT p FROM BST) THEN 'Leaf'
ELSE 'Inner'
END
FROM BST
ORDER BY n;
es hat nicht wie erwartet funktioniert. Warum?
NICHT IN und NULL können Sie überraschen! (Deshalb empfehle ich stattdessen "NOT EXISTS".) – jarlh
"* es hat nicht wie erwartet funktioniert. *" - was hast du erwartet? –
@a_horse_with_no_name Ich erwartete, dass es dieselbe Ausgabe liefert wie mit "IN" – PiyushM