zwei Joins im gleichen Feld (MySQL 4)
snorri
- datenbank
0 Frank (no reg)0 snorri0 Ilja0 Frank (no reg)0 Ilja
Hi alle!
Gesetzt den vereinfachten Fall, ich habe eine Datenbank mit zwei Tabellen:
teilnehmer (id, name)
spiel (id_teilnehmer1, id_teilnehmer2, ergebnis)
Jeder Eintrag in "spiel" verknüpft also genau zwei Datensätze in "teilnehmer". Wenn ich nun eine Liste aller Spiele erstellen will, dann ist ...
SELECT * FROM spiel
... nicht sehr erhellend, weil ich von den beiden Personen jeweils nur die id, nicht aber den Namen angezeigt bekomme. Mit ...
SELECT teilnehmer.id AS teilnehmer1, spiel.teilnehmer2, spiel.ergebnis
FROM teilnehmer, spiel
WHERE spiel.id_teilnehmer1=teilnehmer.id
... wird mir immerhin ein Teilnehmer namentlich angezeigt. Den anderen kann ich aber nicht auf diese Weise hineinjoinen, weil das nicht mehr eindeutig definiert wäre;
SELECT teilnehmer.id AS teilnehmer1, teilnehmer.id AS teilnehmer2 [...]
Wie macht man sowas? Ohne PHP, meine ich, also in einem SQL-Statement ohe subqueries? Geht das überhaupt?
-- snorri
Hallo,
dann benutze doch Alias-Namen für die Tabellen
SELECT *
FROM spiel AS s, teilnehmer AS t1, teilnehmer AS t2
...
Und vielleicht solltest du dir die korrekte syntaktische Schreibweise für JOINs angewöhnen:
SELECT * -- oder welche Felder du hier auch immer ausgeben möchtest
FROM spiel AS s
INNER JOIN teilnehmer AS t1
ON s.teilnehmer1Id = t1.Id
INNER JOIN teilnehmer AS t2
ON s.teilnehmer2Id = t2.Id
Ciao, Frank
Hi Frank,
dann benutze doch Alias-Namen für die Tabellen
Cool, das war genau das, was ich brauchte :-)
Und vielleicht solltest du dir die korrekte syntaktische Schreibweise für JOINs angewöhnen:
Macht das in der Praxis einen Unterschied?
Danke!
-- snorri
yo,
Und vielleicht solltest du dir die korrekte syntaktische Schreibweise für JOINs angewöhnen:
Macht das in der Praxis einen Unterschied?
frank hat sich da geirrt, syntaktisch ist beides erlaubt und auch richtig. aber deine schreibweise macht es schwieriger zu lesen. und lesbarkeit von code ist auch ein wichtiges kriterium.
Ilja
Hi,
hab ein -re vergessen :)
Macht es bei MySQL auch Unterschiede im Query Optimizer?
Ciao, Frank
yo Frank,
Macht es bei MySQL auch Unterschiede im Query Optimizer?
nein gar keinen, es werden letztlich alle bedingungen in die where klausel vom optimierer gezogen.
Ilja