ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
1977
1977
EMPFEHLEN
-
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:
Code :1
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 :1 2 3 4
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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
[U][B]Tabelle Personen:[/B][/U] Person_ID INT Primary Key, Person_name STRING [U][B]Inhalt:[/B][/U] Person_ID, Person_name 1, "Manfred" 2, "Max" 3, "Rüdiger" [U][B]Tabelle Crews:[/B][/U] Crew_ID INT Primary Key, Crew_name STRING [U][B]Inhalt:[/B][/U] Crew_ID, Crew_name 1, "Männer mit Bärten" 2, "Die Krassen" [U][B]Tabelle Zuweisung:[/B][/U] 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) [U][B]Inhalt:[/B][/U] Crew_ID, Person_ID 1, 1 1, 2 2, 2
-
hmm eigentlich sehe ich dein problem nicht, außer das die zuweisungstabelle keinen index hat
sollte doch die abfrage
Code :1 2
select * from Personen as a, Crew as b, Zuweisen as z where a.id = z.PersonenID and b.id = z.CrewID and z.CrewId =2
die crew 2 liefern
gruß
kato
-
Hmmm also folgendes, wenn ich folgendes ausführe:
Code :1
SELECT Crew_ID, Person_ID FROM Zuweisung
Erhalte ich folgendes Ergebnis:
Code :1 2 3 4
Crew_ID, Person_ID 1, 1 1, 2 2, 2
Wenn ich jetzt alle Person_IDs haben will, die NICHT der Crew_ID 2 zugewiesen sind, könnte ich ja folgendes machen:
Code :1
SELECT Crew_ID, Person_ID FROM Zuweisung WHERE Crew_ID != 2
Das Problem ist, dass das folgendes Ergebnis liefert:
Code :1 2 3
Crew_ID, Person_ID 1, 1 1, 2
Wie man sieht, werden die Person_ID 1 und 2 angezeigt. Syntaktisch ist das richtig, aber nicht ganz das, was ich erreichen möchte.
Mein Problem dabei ist nun, dass die Peron_ID 2 angezeigt wird, da diese nicht nur der Crew_ID 1 zugewiesen sondern auch Crew_ID 2 und genau das müsste ich eliminieren.
Ich möchte wirklich nur die Peron_IDs angezeigt kommen die in garkeinem Verhältnis zu einer bestimmten Crew stehen.
Vielleicht noch zum Hintergrund: Ich bastle im Moment an der Oberfläche, mit der man Personen einer Crew zuweisen kann und da möchte ich eine Liste mit Personen anzeigen, aus denen der Benutzer einen auswählt um ihn dann mit einem Klick auf OK zur Crew hinzuzufügen. Mein Problem ist dass, egal wie ich es drehe und wende, in dieser Liste immer wieder Personen auftauchen, die bereits in dieser Crew vorhanden sind, was denkbar schlecht ist, da ich dem Benutzer nicht die Möglichkeit geben will, eine Person quasi doppelt hinzuzufügen (Was Datenbanktechnisch nicht geht, da die Zuweisungstabelle einen Primärschlüssel(Crew_ID, Person_ID) hat).
mfg
Red
Ähnliche Themen
-
MySql - Frage zu n:m Beziehung
Von CPoly im Forum Relationale DatenbanksystemeAntworten: 4Letzter Beitrag: 09.09.10, 14:53 -
Beziehung mysql 1:n
Von Fruitgum im Forum Relationale DatenbanksystemeAntworten: 10Letzter Beitrag: 04.11.09, 11:14 -
MySQL m-c Beziehung / Kategorien
Von Nob im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 27.05.09, 19:17 -
mySQL - n:m Beziehung
Von mschneider im Forum Relationale DatenbanksystemeAntworten: 4Letzter Beitrag: 16.07.04, 12:57 -
n zu m Beziehung in MySQL
Von mC pAiN im Forum Relationale DatenbanksystemeAntworten: 6Letzter Beitrag: 28.01.04, 09:10





Zitieren
Login





