Problem mit einfacher SQL-Anfrage

jorgeHX

Erfahrenes Mitglied
Hallo,
ich habe ein Problem bei meinem SQL-Statement.

Es handelt sich um zwei Tabellen. Tabelle A und Tabelle B. Tabelle A hat eine eindeutige ID namens TabelleA_id. In der Tabelle B findet man Einträge die ebenfalls die TabelleA_id als Fremdschlüssel haben.

Wie kann ich denn nun herausfinden, welche TabelleA_ids NICHT in der Tabelle B sind?

Ich verzweifle noch....

Tausend Dank,
Jorge
 
Code:
SELECT *
FROM TabelleA
LEFT JOIN TabelleB
ON TabelleA_id
WHERE TabelleB.TabelleA_id IS NULL
 
Hallo,
danke für die Antwort.
Leider sagt mir Access immer: Verknüpfungsausdruck nicht unterstützt.

Haste da vielleicht ne Antwort drauf

Danke
 
Von Access habe ich zwar keine Ahnung, aber wenn es wenigstens LEFT JOIN unterstützt, dann könnte es ein Fehler in der ON-Bedingung sein, dass Access diese Syntax nicht unterstützt:
Code:
SELECT *
FROM TabelleA
LEFT JOIN TabelleB
ON TabelleA.TabelleA_id=TabelleB.TabelleA_id
WHERE TabelleB.TabelleA_id IS NULL
 
Hey super, jetzt klappt die Anfrage.

Kann ich die Anfrage jetzt auch noch anhand eines Kriteriums aus Tabelle B einschränken?
D.h. ich will nur die TabelleA_ids haben, bei der der TabelleB_Name = "Meier" ist.

Ist schlecht ausgedrückt, aber vielleicht verstehst du ja, was ich meine.

Vielen Dank,
Jorge
 
Hinter dem WHERE kannst Du jede gewünschte Bedingung angeben.
Nur in Kombination mit der jetzigen wird es nicht gehen, schließlich schließt sie alle Datensätzen, zu denen es auch einen Eintrag in B gibt aus ;)
Code:
SELECT *
FROM TabelleA
LEFT JOIN TabelleB
ON TabelleA.TabelleA_id=TabelleB.TabelleA_id
WHERE TabelleB.TabelleB_Name = "Meier"
Ich bin mir jetzt allerdings auch nicht sicher, ob die Syntax für Access stimmt.

Gruß hpvw
 
Ich verstehe das Problem nicht.
Du willst alle Einträge aus TabelleA, zu denen es keine passende TabelleA_ID in TabelleB gibt. Aus denen willst Du dann die Einträge haben, die in einem Feld in TabelleB einen bestimmten Wert haben. Aber Du hast doch bereits ausgeschlossen, dass es passende Einträge in TabelleB gibt.
Da komme ich nicht mit.
Ich glaube, ich verstehe Dich falsch, vielleicht kannst Du die gewünschte Abfrage mal an einem Beispiel erläutern (Testeinträge aus TabelleA und TabelleB, sowie das daraus gewünschte Ergebnis).

Gruß hpvw
 
Also ich brauche folgendes:

Tabelle A:

Tabelle_A_id
1001
1002
1003
1004

Tabelle B:

Tabelle_B_id Nummer
1002 10
1003 10
1004 12


Ich will nun alle Einträge, die in Tabelle B nicht existieren und die Nummer 10 haben.
Ohne die Einschränkung auf 10 würde ich auch die 1004 erhalten.

Verstehst du mein Problem?

Danke
 
Vielleicht kommen wir ja auf einen Nenner, wenn ich Dir beschreibe, warum ich Dich nicht verstehe:
Du schreibst als erste Bedingung: "die in Tabelle B nicht existieren"
Damit bleibt aus TabelleA der Eintrag mit Tabelle_A_id=1001

Nun schreibst Du: "die Nummer 10 haben"
Dabei bleiben die Einträge mit den IDs 1002 und 1003 übrig.

Verknüpft man dieses mit UND, so bleibt nichts mehr übrig, da es keinen Eintrag gibt, der beiden Bedinungen genügt.

Das bringt mich zu der Vermutung, dass Du ODER meinst:
Finde alle Einträge, die in Tabelle B nicht existieren oder die Nummer 10 haben.

Dazu kann man die WHERE-Klausel natürlich entsprechend anpassen:
Code:
SELECT *
FROM TabelleA
LEFT JOIN TabelleB
ON TabelleA.TabelleA_id=TabelleB.TabelleA_id
WHERE TabelleB.TabelleB_Name = "Meier" 
  OR TabelleB.TabelleA_id IS NULL
Wieder ohne Garantie, dass in Access die Syntax so aussehen muss.

Gruß hpvw

Lit: http://de.wikipedia.org/wiki/Boolsche_Algebra#Zweielementige_boolesche_Algebra
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück