SQL-Frage (NOT IN...)
Andrea
- datenbank
Hallöchen zusammen,
ich habe folgende zwei Datenbanktabellen:
TabelleA: Spalten-> a_ID, a_spalte1, a_spalte2
TabelleB: Spalten-> b_ID, b_spalte1, b_spalte2
Ich möchte nun mit einer SQL Abfrage alle Einträge aus TabelleB haben, wo sich ein Eintrag aus b_spalte1 NICHT in der Spalte a_ID der TabelleA befindet.
Dazu hatte ich folgendes SQL angedacht:
SELECT b.*
FROM TabelleA a, TabelleB b,
WHERE b.b_spalte1
NOT IN a.a_ID;
Das funktioniert aber leider nicht. Bei dem "NOT IN" bin ich mir aber nicht so sicher. Könnte es vielleicht daran liegen?
Für Eure Hilfe danke ich im Voraus.
Liebe Grüße
Andrea
SELECT b.*
FROM TabelleA a, TabelleB b,
WHERE b.b_spalte1
NOT IN a.a_ID;Andrea
Hi Andrea, ich bin mir jetzt zwar nicht mehr ganz sicher, aber gehört da nicht der "HAVING" Befehl anstatt dem NOT IN hin?
Andi
Hi,
SELECT b.*
FROM TabelleA a, TabelleB b,
WHERE b.b_spalte1
NOT IN a.a_ID;
Das ist etwas komplizierter gedacht, als es eigentlich sein sollte:
Gib mir alle Spalten
aus TabelleB
wo die spalte1 nicht in (gib mir alle spaltenids aus tabellea) ist.
--> und genau so in SQL:
SELECT b.*
FROM TabelleB
WHERE b_spalte1 NOT IN (SELECT a_ID FROM TabelleA);
Ach ja: Bitte nicht SELECT *
MfG
Rouven
Hi Rouven
danke für die schnelle Antwort.
Das funktioniert leider noch nicht ganz.
Das ist etwas komplizierter gedacht, als es eigentlich sein sollte:
Gib mir alle Spalten
aus TabelleB
wo die spalte1 nicht in (gib mir alle spaltenids aus tabellea) ist.--> und genau so in SQL:
SELECT b.*
FROM TabelleB
WHERE b_spalte1 NOT IN (SELECT a_ID FROM TabelleA);
Jedes Ergebnis kommt so oft wie es Einträge in TabelleA gibt.
Beispiel: Die TabelleA hat 100 Einträge.
Falls "b_spalte1" nicht in "a_ID" ist, (Damit wäre es ein Ergebnis der Abfrage) erscheint dieser Eintrag 100 mal.
Wie kann man das noch verfeinern?
Liebe Grüße
Andrea
Hi Rouven
--> und genau so in SQL:
SELECT b.*
FROM TabelleB
WHERE b_spalte1 NOT IN (SELECT a_ID FROM TabelleA);
Habe den Fehler gefunden. Im FROM hatte ich beide Tabellen angegeben. Da muss natürlich nur TabelleB stehen.
Vielen Dank nochmal
Liebe Grüße
Andrea
Hallöchen,
sollte es trotzdem mal dazu kommen, dass du mehrere gleiche Sätze erhältst, dann hilft dir auch SELECT DISTINCT...
MfG
Rouven
n'abend,
SELECT b.*
FROM TabelleA a, TabelleB b,
WHERE b.b_spalte1
NOT IN a.a_ID;
je nach dem mit welchem SQL du arbeites, kannst du das auch per subSelect lösen... stehen subselects nicht zur verfügung willst du vielleicht einen LEFT JOIN machen und dir dann die zeilen ausgeben, deren spalte xyz NULL ist :)
(letzteres verwende ich auf mysql4.0 um datensätze zu finden, die keinen "eigentümer" mehr haben...)
weiterhin schönen abend...