Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - Join über 4 Tabellen, Fehler: not unique table
BLR - Do 26.08.10 17:21
Titel: Join über 4 Tabellen, Fehler: not unique table
Hallo, ich würde gerne für mein Programm aus 3 Join-Abfragen eine machen. Diese 3 Join-Abfragen funktionieren einzeln, also kann es eigentlich nicht an der DB-Aufbau liegen.
2 Joins habe ich bereits zusammengeführt aber bei der dritten habe ich irgendwie Probleme mit der Klammer (nehme ich an)
Abfrage über 3 Tabellen mit 2 Joins
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7:
| select re_positionen.ID_Pos, rechnung.RechnungsNummer, rechnung.Datum, artikel.Artikel_Bezeichnung from (re_positionen join rechnung on re_positionen.FK_RE_ID = rechnung.ID_RE and rechnung.ID_RE = 3) join artikel on artikel.ID_Art = re_positionen.FK_Art_ID where artikel.ID_Art = 45 |
Nun Abfrage über 4 Tabellen mit 3 Joins
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| select re_positionen.ID_Pos, rechnung.RechnungsNummer, rechnung.Datum, artikel.Artikel_Bezeichnung, kunde.Name, kunde.Vorname from ((re_positionen join rechnung on re_positionen.FK_RE_ID = rechnung.ID_RE and rechnung.ID_RE = 3, rechnung join kunde on rechnung.FK_Kunde_ID = kunde.ID_Kunde) join artikel on artikel.ID_Art = re_positionen.FK_Art_ID where artikel.ID_Art = 45) join kunde on rechnung.FK_Kunde_ID = kunde.ID_Kunde and rechnung.FK_Kunde_ID = 4 |
Fehler:
#1066 - Not unique table/alias: 'rechnung'
Ich nehme an, er hat Probleme mit 2 Zeilen:
SQL-Anweisung
1:
| join rechnung on re_positionen.FK_RE_ID = rechnung.ID_RE |
und
SQL-Anweisung
1:
| join kunde on rechnung.FK_Kunde_ID = kunde.ID_Kunde |
Ich habe die RechnungsID als Fremdschlüsse in der RE_Positionen
Und KundenID als Fremdschlüssel in der Tabelle Rechnung...
P.S fall die DB gebraucht wird, kann ich gern ein DB-Diagramm machen.
Danke für die Ratschläge :)
Trashkid2000 - Do 26.08.10 19:26
Hi,
habe das ganze mal ausprobiert.
Also, in Deinem Statement ist 2x ein Join auf die Tabelle Kunde. Weiss nicht, ob das Absicht oder ein Versehen war, aber so funktioniert das nicht.
Habe es mal umgeschrieben, das ist das Ergebnis:
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| SELECT re_positionen.ID_Pos, rechnung.RechnungsNummer, rechnung.Datum, artikel.Artikel_Bezeichnung, kunde.Name, kunde.Vorname FROM re_positionen INNER JOIN rechnung ON re_positionen.FK_RE_ID = rechnung.ID_RE AND rechnung.ID_RE = 3 INNER JOIN artikel ON artikel.ID_Art = re_positionen.FK_Art_ID AND artikel.ID_Art = 45 INNER JOIN kunde ON kunde.ID_Kunde = rechnung.FK_Kunde_ID AND rechnung.FK_Kunde_ID = 4; |
oder übersichtlicher, so finde ich:
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| SELECT re_positionen.ID_Pos, rechnung.RechnungsNummer, rechnung.Datum, artikel.Artikel_Bezeichnung, kunde.Name, kunde.Vorname FROM re_positionen, rechnung, artikel, kunde WHERE re_positionen.FK_RE_ID = rechnung.ID_RE AND artikel.ID_Art = re_positionen.FK_Art_ID AND kunde.ID_Kunde = rechnung.FK_Kunde_ID AND rechnung.ID_RE = 3 AND artikel.ID_Art = 45 AND rechnung.FK_Kunde_ID = 4; |
Kann sein, dass ich bei den Spaltenbezeichnern was verplant habe, da diese manchmal sehr komisch sind.
Viel Spaß damit,
Marko
BLR - Do 26.08.10 21:44
ohh cool, danke, das war genau mein Fehler, hab da aus versehen was überflüssiges reingeschrieben
Trashkid2000 - Do 26.08.10 21:47
Hab ich gern gemacht
Marko
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!