Mssql join ...

Mastika

Grünschnabel
Hi Leute,

versuche seit Tagen eine gescheite Abfrage zu generieren, ohne Erfolg.
Folgende Situation.

Zwei Tabellen sollen sinnvoll verknüpft werden.

Tabelle 1: tblAuftrag
Spalten: ID | AuftragsNr | KundenNr | Bauteil1ID | Bauteil2ID | Bauteil3ID

Tabelle 2: tblBauteile
Spalten: ID | BauteilNr | Bezeichnung

Ziel Tabelle:
Spalten: AuftragsNr | KundenNr | Bauteil1Nr | Bauteil1Bez | Bauteil2Nr | Bauteil2Bez | Bauteil3Nr | Bauteil3Bez

Ansatz:
Code:
SELECT tblAuftrag.AuftragsNr, tblAuftrag.KundenNr, 
             tblBauteile.BauteilNr AS Bauteil1Nr, tbl.Bauteile.Bezeichnung AS Bauteil1Bez,
             tblBauteile.BauteilNr AS Bauteil2Nr, tbl.Bauteile.Bezeichnung AS Bauteil2Bez,
             tblBauteile.BauteilNr AS Bauteil3Nr, tbl.Bauteile.Bezeichnung AS Bauteil3Bez
FROM tblAuftrag
INNER JOIN tblBauteile ON tblAuftrag.Bauteil1ID = tblBauteile.ID
INNER JOIN tblBauteile ON tblAuftrag.Bauteil2ID = tblBauteile.ID
INNER JOIN tblBauteile ON tblAuftrag.Bauteil3ID = tblBauteile.ID

Ergebnis:
Meldung 1013,......
Die Objekte....haben den selben verfügbar gemachten Namen.....

Kann mir jemand helfen bitte?

MfG
Mastika
 
Beim mehrmaligen verwenden der gleichen Tabelle muss man aliases verwenden (ist allgemein empfohlen immer mit aliases zu arbeiten):

SQL:
SELECT a.AuftragsNr, a.KundenNr, 
             bt1.BauteilNr AS Bauteil1Nr, bt1.Bezeichnung AS Bauteil1Bez,
             bt2.BauteilNr AS Bauteil2Nr, bt2.Bezeichnung AS Bauteil2Bez,
             bt3.BauteilNr AS Bauteil3Nr, bt3.Bezeichnung AS Bauteil3Bez
FROM tblAuftrag a
INNER JOIN tblBauteile bt1 ON a.Bauteil1ID = bt1.ID
INNER JOIN tblBauteile bt2 ON a.Bauteil2ID = bt2.ID
INNER JOIN tblBauteile bt3 ON a.Bauteil3ID = bt3.ID;
 
Zuletzt bearbeitet von einem Moderator:
Moin Mastika,

nur ergänzend zu BaseBallBatBoy, der die Frage vollständig beantwortet hat, noch ein Hinweis:

Falls zu einem Kundenauftrag zwingend ein Bauteil, meistens 2 und manchmal vielleicht auch 3 Bauteile gehören, dann solltest du den zweiten und dritten INNER JOIN in einen LEFT JOIN ändern.

Mit der obigen Abfrage bekommst du "nur" alle Aufträge mit genau 3 Bauteilen (wenn sie denn auch der Parentabelle tblBauteile gefunden werden).

Grüße
Biber
 
Hallo BaseBallBatBoy, hallo Biber3

danke für die Antworten...
BaseBallBatBoy's Antwort hat mir schonmal super weitergeholfen, daraufhin ist mir genau das aufgefallen was Biber3 geschrieben, wollte schon die Frage stellen. Hat sich jetzt damit erledigt.

Vielen Dank für die Hilfen.

MfG
Mastika
 
Zurück