Joins >= 3 Tabellen

thehasso

Erfahrenes Mitglied
Hallo zusammen,

Nachdem ich mich mit den Grundlagen von SQL einigermaßen auskenne, wollte ich jetzt etwas fortgeschrittenere SQL ABFRAGEN machen.

Bis jetzt habe ich den Inner Join, Left Join und Right Join kennengelernt. Dabei habe ich aber immer nur 2 Tabellen miteinander verbunden. Sprich T1 = T2 und dann in ON die Bedingung.


Wenn ich jetzt 3 Tabellen miteinander Verbinden möchte, wie sähe denn dann die Syntax aus ?

Beispiel:
T1 = T2
T2 = T3
Und dann
ON Bedingung 1
On Bedingung 2

Oder sähe es so aus:
T1 = T2
ON Bedingung 1
T2 = T3
ON Bedingung 2



Würd mich über ein selbst ausgewähltes beispiel freuen.

Danke
 
Einfach ein weiterer Join anhängen

SQL:
SELECT
  T1.*,
  T2.name,
  T3.feld13
FROM
  T1
  INNER JOIN T2
    ON T1.d = T2.t1_id
  LEFT JOIN T3
    ON T1.id = T3.t1_id
    AND T2.code = T3.code
    AND ...
 
Zuletzt bearbeitet von einem Moderator:
Hallo Yaslaw,

ich glaub ich habs fast verstanden, ich hab hier mal ein Beispiel, würd mich freuen, wenn du drüber schaust.

Es gibt insgesamt 3 Tabellen, um von Tabelle 1 zu 2 zu gelangen hat man in Tabelle 2 einen Fremdschlüssel Namens KundenID und um von Tabelle 2 zu Tabelle 3 zu gelangen hat man in Tabelle 3 den Fremdschlüssel ArtikelgruppeID


Tabelle 1 (Kunde)

Kunde
KundenID

Tabelle 2 ( Artikelgruppe )

Artikelgruppe
ArtikelgruppeID
KundenID -> Fremdschlüssel

Tabelle 3 ( Artikel )

Artikel
ArtikelID
ArtikelgruppeID -> Fremdschlüssel



Die SQL Abfrage sieht dann folgendermaßen aus:

Code:
SELECT T1.*,
             T2*,
             T3.* FROM Kunde AS T1
                                       INNER JOIN Artikelgruppe AS T2 ON T1.KundenID = T2.KundenID
                                       INNER JOIN Artikel AS T3 ON T2.ArtikelgruppeID = T3.ArtikelgruppeID

Also ich bin vorgegangen, indem ich von Tabelle 1 nach Tabelle 2 gehe von Tabelle 2 nach Tabelle 3 usw. Tabelle 4 nach Tabelle 5

Bei dein Beispiel machst du bei dem Left join eine Verbindung von Tabelle 1 zu Tabelle 3. Dafür müssen aber bei beiden Tabelle die schlüssel vorhanden sein die zueinander passen sollten, richtig ?



Beste Grüße
 
Also, dein SQL sieht gut aus.

Zum LEFT JOIN und INNER JOIN.

Code:
Tabelle A
A_ID | A_NAME
----------
1    | x
2    | y
3    | z

Tabelle B
B_ID | A_ID_FK
--------------
1    | 1
2    | 1
3    | 3

A INNER JOIN B:
Nimm Alles von A und B, das in B auch enthalten ist
Code:
A INNER JOIN B ON A.A_ID = B.A_ID_FK
A_NAME | B_ID
-------------
x      | 1
x      | 2
z      | 3

A LEFT JOIN B:
Nimm alles von A (auch wenn in B nix passendes ist) und die passenden aus B
Code:
A LEFT JOIN B ON A.A_ID = B.A_ID_FK
A_NAME | B_ID
-------------
x      | 1
x      | 2
y      | NULL
z      | 3
 
Hallo Yaslaw,

danke was der inner Join und Left Join bewirken habe ich schon recherchiert. Mir geht s eigentlich nur um die SYNTAX.

Z.b:
Code:
SELECT T1.*,
             T2*,
             T3.* FROM Kunde AS T1
                                       INNER JOIN Artikelgruppe AS T2 ON T1.KundenID = T2.KundenID
                                       INNER JOIN Artikel AS T3 ON T2.ArtikelgruppeID = T3.ArtikelgruppeID


Code:
SELECT T1.*,
             T2*,
             T3.* FROM Kunde AS T1
                                       INNER JOIN Artikelgruppe AS T2 
                                       INNER JOIN Artikel AS T3 
                 ON T1.KundenID = T2.KundenID
                 ON T2.ArtikelgruppeID = T3.ArtikelgruppeID

Ist die zweite Syntax ebenso gut ? Könntest du mir vielleicht ein gutes Buch zu SQL Abfragen im hinblick auf dem SQL SERVER bzw. Business Intelligence empfehlen?

LG
 
Ob die 2te überhabut geht mag ich mal bezweifeln.....

Auch die erste geht nicht. Du hast T1, dann T2 , dann T3 das du zu T1 umbenennst, anschliessend die Artielgruppe die zu T2 wird (owoghl T2 schon aufgeführt ist...

Es ist immer
Tabelle JOIN Tabelle ON bedinung JOIN Tabelle ON Bedinnung JOIN Tabelle ON Bedinnung
 
komisch, jetzt versteh ich gar nichts mehr.

du sagtest ja ganz zu Beginn das die SQL Abfrage gut aussieht:

Code:
SELECT T1.*,
             T2*,
             T3.* FROM Kunde AS T1
                                       INNER JOIN Artikelgruppe AS T2 ON T1.KundenID = T2.KundenID
                                       INNER JOIN Artikel AS T3 ON T2.ArtikelgruppeID = T3.ArtikelgruppeID

Und nun sagst du, das die erste SQL Abfrage nicht geht.


Warum geht die denn nicht ?
 
Weil ich den Fehler erst jetzt gesehen habe. Manchmal übersieht man einige Fehler vor lauter Fehlern. *g*

Ansonsten: "Probieren geht über Studieren"
ALso mit HeidiSQL oder phpMyAdmin einfach mal das Query ausprobieren und schauen ob es funktioniert.
 
allo Yaslaw, hab die Abfrage im SQL SERVER ausprobiert.
Da musst ich das aber mit Transact SQL machen, is ja eigentlich kein Großer unterschied. Da hab ich das nach dem selben Prinzip gemacht und es funktioniert.

Siehe:

Code:
SELECT [AdventureWorks].[dbo].[Kunden].[KundeID]
      ,[AdventureWorks].[dbo].[Kunden].[KundenName]
      ,[AdventureWorks].[dbo].[Kunden].[Kundennummer]
      ,[AdventureWorks].[dbo].[Artikel].[ArtikelID]
      ,[AdventureWorks].[dbo].[Artikel].[KundenID]
      ,[AdventureWorks].[dbo].[Artikel].[Artikelnummer]
      ,[AdventureWorks].[dbo].[Artikel].[Artikelname]
      ,[AdventureWorks].[dbo].[Artikel].[Artikelpreis]
      ,[AdventureWorks].[dbo].[Zeit].[ArtikelID]
      ,[AdventureWorks].[dbo].[Zeit].[Date]
    FROM [AdventureWorks].[dbo].[Kunden] INNER JOIN [AdventureWorks].[dbo].[Artikel] 
	ON [AdventureWorks].[dbo].[Kunden].[KundeID]=[AdventureWorks].[dbo].[Artikel].[KundenID]
	INNER JOIN [AdventureWorks].[dbo].[Zeit] 
	ON [AdventureWorks].[dbo].[Artikel].[ArtikelID] = [AdventureWorks].[dbo].[Zeit].[ArtikelID]
GO
 
Zurück