Komplexe SQL-Abfrage

...komplette Frage anzeigen

2 Antworten

SELECT id_begegnung, anstossdatum, anstossuhrzeit,
  m1.bezeichnung AS Heim, m2.bezeichnung AS Gast
  FROM tbl_begegnung b
  INNER JOIN tbl_mannschaft m1
  ON(b.heimmannschaft=m1.id_mannschaft)
  INNER JOIN tbl_mannschaft m2
  ON(b.gastmannschaft=m2.id_mannschaft);
+--------------+--------------+----------------+--------------+--------------+
 id_begegnung | anstossdatum | anstossuhrzeit | Heim         | Gast         |
+--------------+--------------+----------------+--------------+--------------+
            2 |            1 |              1 | Mannschaft B | Mannschaft A |
            1 |            1 |              1 | Mannschaft A | Mannschaft B |
+--------------+--------------+----------------+--------------+--------------+
2 rows in set (0.00 sec)
calli23 24.11.2011, 21:14

" #1054 - Unknown column 'm1.bezeichnung' in 'field list' " krieg ich als Meldung.

Was ist m1 und m2? Muss ich dafür noch Werte von mir einsetzen? Ich will ja, dass er anhand der IDNummern die Mannschafen aus der tblmannschaft nimmt.

0
ultrarunner 24.11.2011, 21:28
@calli23

Wenn du diese Meldung bekommst, dann liegt das daran, dass es in deiner tbl_mannschaft kein Feld "bezeichnung" gibt.

m1 und m2 sind sogenannte Aliasnamen für die Tabelle tbl_mannschaft, die man deshalb braucht, weil hier zweimal mit derselben Tabelle "gejoint" wird und man bei den ON-Bedingungen angeben muss, auf welche der beiden man sich bezieht. Du musst dafür nichts einsetzen.

Ich probierte die Abfrage ja aus, nachdem ich Tabellen gemäß deiner Vorgaben angefertigt und mit ein paar Datensätzen befüllt hatte. Die Ausgabe siehst du oben (ich habe für Datum und Uhrzeit der Einfachheit halber nur Integer-Werte verwendet).

0
calli23 24.11.2011, 21:38
@ultrarunner

Aaah sorry, das war auch wirklich mein Fehler. Ich hatte inzwischen den Feldnamen geändert. Es funktioniert einwandfrei jetzt.

Dank dir!

0

Du musst in der Abfrage zwei Verbindungen zur Tabelle mannschaft aufbauen. Damit die Datenbank die Verbindungen nicht durcheinanderbringt, da es sich ja zweimal um die selbe Tabelle handelt, musst du die Tabellenbezeichnung qualifizieren. Durch Voranstellen einer beliebigen Bezeichnung machst Du aus der einen Tabelle scheinbar zwei: h.mannschaft und g.mannschaft. Die Datenbank greift dann so auf die Tabelle zu, als ob sie zwei verschiedene wären, auch wenn sie nur einmal vorhanden ist.

select id_begegnung, anstossdatum, anstossuhrzeit, h.bezeichnung, g.bezeichnung from begegnung, h.bezeichnung, g.bezeichnung where heimmannschaft = h.mannschaft and gastmannschaft = g.mannschaft

union ist in diesem Zusammen völlig unangebracht.

Was möchtest Du wissen?