Hallo !
Ich habe Probleme damit eine bestimmte Abfrage in SQL zu formulieren. Und zwar geht es um folgendes:
Ich habe drei Tabellen, nämlich Crews, Personen und Zuweisung.
Die Tabelle Crews enthält eine Crew_ID und einen Crew_namen und wird dazu genutzt, um die Crew eines Segelbootes zu beschreiben.
Die tabelle Personen enthält eine Person_ID sowie Daten zu einer Person (Person_name, Person_adresse, etc...) und wird genutzt um Daten zu Personen zu speichern.
Die Tabelle Zuweisung enthält ebenfalls eine Person_ID und Crew_ID und wird genutzt, um die Tabelle Crews und Personen zu verknüpfen.
Es gilt folgendes: Eine Person kann in mehreren Crews mitglied sein. Eine Crew kann mehrere Personen als Mitglied haben. Das Ganze ist also eine n-zu-n Beziehung.
Was ich nun erreichen möchte ist eine Abfrage, mit der ich alle Person_IDs bekommen kann die nicht in einer bestimmten Crew angehören. Bisher hab ich folgendes zustande gebracht:
Was folgendes Ergebnis liefert:
Das Problem ist, dass er die Person_ID = 2 trotzdem anzeigt, obwohl es in der Tabelle Zuweisung einen Datensatz (Person_ID = 2, Crew_ID = 2) gibt, der rausgefiltert werden müsste.
Tja ich hab leider nicht die geringste Ahnung, wie ich das genau zustande bringen kann.
Ich hoffe nur, dass ich mich verständlich machen konnte und dass mich einer von euch erleuchten kann.
Hier mal rudimentär der Aufbau der Datenbank samt Inhalt:
Ich habe Probleme damit eine bestimmte Abfrage in SQL zu formulieren. Und zwar geht es um folgendes:
Ich habe drei Tabellen, nämlich Crews, Personen und Zuweisung.
Die Tabelle Crews enthält eine Crew_ID und einen Crew_namen und wird dazu genutzt, um die Crew eines Segelbootes zu beschreiben.
Die tabelle Personen enthält eine Person_ID sowie Daten zu einer Person (Person_name, Person_adresse, etc...) und wird genutzt um Daten zu Personen zu speichern.
Die Tabelle Zuweisung enthält ebenfalls eine Person_ID und Crew_ID und wird genutzt, um die Tabelle Crews und Personen zu verknüpfen.
Es gilt folgendes: Eine Person kann in mehreren Crews mitglied sein. Eine Crew kann mehrere Personen als Mitglied haben. Das Ganze ist also eine n-zu-n Beziehung.
Was ich nun erreichen möchte ist eine Abfrage, mit der ich alle Person_IDs bekommen kann die nicht in einer bestimmten Crew angehören. Bisher hab ich folgendes zustande gebracht:
Code:
SELECT P.Person_ID, Z.Crew_ID FROM Personen P LEFT JOIN Zuweisung Z ON P.Person_ID = Z.Person_ID WHERE Crew_ID != 2
Was folgendes Ergebnis liefert:
Code:
Person_ID, Crew_ID
1, 1
2, 1
3, NULL
Das Problem ist, dass er die Person_ID = 2 trotzdem anzeigt, obwohl es in der Tabelle Zuweisung einen Datensatz (Person_ID = 2, Crew_ID = 2) gibt, der rausgefiltert werden müsste.
Tja ich hab leider nicht die geringste Ahnung, wie ich das genau zustande bringen kann.
Ich hoffe nur, dass ich mich verständlich machen konnte und dass mich einer von euch erleuchten kann.
Hier mal rudimentär der Aufbau der Datenbank samt Inhalt:
Code:
Tabelle Personen:
Person_ID INT Primary Key,
Person_name STRING
Inhalt:
Person_ID, Person_name
1, "Manfred"
2, "Max"
3, "Rüdiger"
Tabelle Crews:
Crew_ID INT Primary Key,
Crew_name STRING
Inhalt:
Crew_ID, Crew_name
1, "Männer mit Bärten"
2, "Die Krassen"
Tabelle Zuweisung:
Crew_ID INT,
Person_ID INT,
CONSTRAINT fk1_Zuweisung FOREIGN KEY (Person_ID)
REFERENCES Personen (Person_ID),
CONSTRAINT fk2_Zuweisung FOREIGN KEY (Crew_ID)
REFERENCES Crews(Crew_ID)
Inhalt:
Crew_ID, Person_ID
1, 1
1, 2
2, 2