monsee
Neuer Benutzer
- Beiträge
- 3
Hallo zusammen,
eigentlich schreibe ich SQL-Statements blind, aber trotzdem kommt ja mal ab und an eine Frage auf.
Worin besteht der Unterschied zwischen EXISTS (Subselect) und [Spalte] IN (Subselect).
Meine Frage gründet auf folgendem:
Ich habe zwei Tabellen, Tabelle t1 mit Primary Key c_id und Tabelle t2 mit Foreign Key c_id.
Ich wollte nun aus t1 alle IDs haben, deren Foreign Key in t2 nicht vorkommt.
Meine erste Abfrage war:
SELECT t1.c_id FROM t1 WHERE NOT EXISTS (SELECT t2.c_id FROM t2)
Das Ergebnis war leer. Ich vermute mal, dass ich nicht speziell nach der ID gesucht habe, weil vor dem Subselect ja kein Kriterium steht.´
Ok, aber wonach hat die EXISTS-Abfrage jetzt eigentlich gesucht, was nicht existent sein könnte?
Diese Abfrage brachte mir die t1.c_id's, die in t2 nicht existierten:
SELECT t1.c_id FROM t1 WHERE NOT t1.c_id IN (SELECT t2.c_id FROM t2)
Wo ist der Unterscheid?
Beste Grüße,
monsee
eigentlich schreibe ich SQL-Statements blind, aber trotzdem kommt ja mal ab und an eine Frage auf.
Worin besteht der Unterschied zwischen EXISTS (Subselect) und [Spalte] IN (Subselect).
Meine Frage gründet auf folgendem:
Ich habe zwei Tabellen, Tabelle t1 mit Primary Key c_id und Tabelle t2 mit Foreign Key c_id.
Ich wollte nun aus t1 alle IDs haben, deren Foreign Key in t2 nicht vorkommt.
Meine erste Abfrage war:
SELECT t1.c_id FROM t1 WHERE NOT EXISTS (SELECT t2.c_id FROM t2)
Das Ergebnis war leer. Ich vermute mal, dass ich nicht speziell nach der ID gesucht habe, weil vor dem Subselect ja kein Kriterium steht.´
Ok, aber wonach hat die EXISTS-Abfrage jetzt eigentlich gesucht, was nicht existent sein könnte?
Diese Abfrage brachte mir die t1.c_id's, die in t2 nicht existierten:
SELECT t1.c_id FROM t1 WHERE NOT t1.c_id IN (SELECT t2.c_id FROM t2)
Wo ist der Unterscheid?
Beste Grüße,
monsee