Abfrage über zwei Tabellen

FrankWST

Erfahrenes Mitglied
Hallo,

ich habe zwei Tabellen (Veranstaltung und Gäste):
Code:
Veranstaltung            Gäste
-------------            ----------
Name  Typ  Gästeliste    ID  ListID  Gast
abc   a     1            1   1       Hans
cde   x     2            2   1       Xaver
fgh   a     3            3   2       Hans
klm   a     4            4   2       Xaver
                         5   3       Hans
                         6   3       Xaver
                         7   4       Xaver

Anm.: "Gästeliste" in Veranstaltung ist die "ListID" in Gäste.
D.h. jede Veranstaltung hat eine Gästeliste. Diese kann wiederum aus beliebig vielen Gästen bestehen.
Nun möchte ich wissen an welchen Veranstaltungen, die vom Typ "a" sind, nimmt Hans teil?
Ergebnis wäre also "abc" und "fgh".
Kann mir von Euch jemand helfen, wie ich das als SELECT-Statement formuliere?

Vielen Dank,
Frank
 
Zuletzt bearbeitet:
Hi Frank,
das sieht mir für ein schönes Beispiel dafür aus, dass SELECT-Statements dann besonders schwer zu formulieren sind, wenn das Datenmodell nicht sorgfältig entwickelt wurde.

Mein Vorschlag sieht daher so aus, dass Du erstmal eine vernünftige Normalisierung durchführst, danach ist das Select eher trivial.

So würde ich die Tabellen daher aufteilen:
Code:
Veranstaltung            
-------------            
VeranstaltungsID Name  Typ      
 1             	 abc   a     
 2            	 cde   x     
 3            	 fgh   a     
 4            	 klm   a     

                         
 
Gästeliste
----------
ID  VeranstaltungsID  GastID
1   1       		1
2   1       		2
3   2       		1
4   2       		2
5   3       		1
6   3       		2
7   4       		2


Gäste
-----

ID  	Name
1	Hans	
2	Xaver

Dann müßte die Abfrage zur Beantwortung Deiner Frage so aussehen (ich habe mal Oracle-Syntax gewählt)

Code:
SELECT Veranstaltung.Name 
FROM Veranstaltung, Gästelist, Gäste
WHERE
Veranstaltung.VeranstaltungsID = Gästeliste.VeranstaltungsID 
AND Gästeliste.GastID = Gäste.ID
AND Veranstaltung.Typ = 'a'
AND Gäste.Name = 'Hans'

Gruß
Oliver
 
Nun ja, z.B.
Code:
SELECT name
FROM veranstaltung v, gäste g
WHERE v.typ = "a" AND v.gästeliste = g.ListID AND g.gast = "Hans"
 
Hallo Oliver,

vielen Dank für Deine Hilfe!
Ich hatte mich etwas mit den IDs vertan:
Ich hatte
Code:
Veranstaltung.VeranstaltungsID = Gästeliste.ID
statt
Code:
Veranstaltung.VeranstaltungsID = Gästeliste.VeranstaltungsID

Also danke,
Frank
 

Neue Beiträge

Zurück