Join: Zwei Felder in einer Tabelle

Tobi81

Neuer Benutzer
Beiträge
2
Hallo zusammen,

ich möchte gerne Fußballspiele in eine MySQL Datenbank schreiben.
Dazu habe ich aktuell eine DB in der ich die gespielten Spiele schreibe "spiel" (natürlich hier vereinfacht) und eine Tabelle für die verschiedenen Liegen "liga" und eine Tabelle für die Vereine "verein".

Nun würde ich gerne ein Select auf die Tabelle Spiel machen, und die entsprechenden Werte aus den anderen Tabellen sehen.

Hier der Aufbau meiner Tabellen:

Code:
CREATE TABLE IF NOT EXISTS `spiel` (
  `id` int(6) NOT NULL,
  `id_verein_heim` int(6) NOT NULL,
  `id_verein_gast` int(6) NOT NULL,
  `id_liga` int(6) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `spiel`
  ADD PRIMARY KEY (`id`);
ALTER TABLE `spiel`
  MODIFY `id` int(6) NOT NULL AUTO_INCREMENT;

INSERT INTO `spiel` (`id`, `id_verein_heim`, `id_verein_gast`, `id_liga`) VALUES (1, 1, 2, 1);

Code:
CREATE TABLE IF NOT EXISTS `liga` (
  `id` int(4) NOT NULL,
  `name` varchar(200) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `liga`
  ADD PRIMARY KEY (`id`);
ALTER TABLE `liga`
  MODIFY `id` int(4) NOT NULL AUTO_INCREMENT;

INSERT INTO `liga` (`id`, `name`) VALUES (1, '1. Bundesliga');

Code:
CREATE TABLE IF NOT EXISTS `verein` (
  `id` int(11) NOT NULL,
  `name` varchar(200) NOT NULL,
  `kurzname` varchar(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `verein`
  ADD PRIMARY KEY (`id`);
ALTER TABLE `verein`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

INSERT INTO `verein` (`id`, `name`, `kurzname`) VALUES
(1, 'Fußballverein 1', 'FBV 1'),
(2, 'Fußballverein 2', 'FBV 2');


So sieht mein SQL Statement aktuell aus, aber ich bekomm es nur mit einem Vereinsnamen hin:

Code:
SELECT v.name, l.name FROM spiel s, verein v, liga l WHERE s.id_verein_heim=v.id AND s.id_liga=l.id

Knackpunkt ist wohl: s.id_verein_heim=v.id


Wie bekomme ich das jetzt mit den beiden Vereine angezeigt?



Vielen Dank,
Tobi
 
Werbung:
Ohne mir jetzt alles angeguckt zu haben etwa so:
Code:
SELECT    vh.name,
        vg.name,
        l.name
FROM    spiel s
LEFT JOIN verein vh
ON        s.id_verein_heim = vh.id
LEFT JOIN verein vg
ON        s.id_verein_gast = vg.id
LEFT JOIN liga l
ON        s.id_liga=l.id
Du hast ja im prinzip schon einen INNER JOIN verwendet, ich würde den Join aber a) explizit als solchen ausschreiben und b) einen LEFT JOIN nehmen. Außerdem musst du die Vereinstabelle zweimal joinen mit unterschiedlichen Aliasen.
 
Vielen Dank ukulele, dass funktioniert! :)

Die Syntax ist schon hart für mich. Da muss ich mal ein bisschen drüber nachdenken, um das zu verstehen... :-/

Würdest du die IDs der beiden Vereine auch in der Übersichtstabelle speichern, oder eher eine zweite Tabelle bauen, in der zu der Begegnung passend die IDs der Vereine stehen?


Dank Dir!
 
Werbung:
Also wenn du mit "Überischtstabelle" die Tabelle "spiel" meinst dann sollten die IDs beider Vereine da drinne stehen. Es handelt sich eigentlich um eine n:m Beziehung von der "verein"-Tabelle mit sich selbst die bekanntlich als eigene Tabelle abgebildet wird und es sind ja immer genau 2 Vereine, keine der Spalten darf NULL sein.

Streng genommen bilden diese beiden Foreign Keys zusammen mit Datum/Uhrzeit des Spiels auch einen eindeutigen Schlüssel, könnten also als Primary Key dienen. Aus Komfortgründen arbeite ich aber nicht gerne mit zusammengesetzten PKs.
 
Zurück
Oben