tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Yaslaw
  • 1 Beitrag von Yaslaw
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
531
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    thehasso thehasso ist offline Mitglied Brokat
    Registriert seit
    Apr 2008
    Beiträge
    345
    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
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Einfach ein weiterer Join anhängen

    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    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 ...
    thehasso bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    thehasso thehasso ist offline Mitglied Brokat
    Registriert seit
    Apr 2008
    Beiträge
    345
    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 :
    1
    2
    3
    4
    5
    6
    
     
    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
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Also, dein SQL sieht gut aus.

    Zum LEFT JOIN und INNER JOIN.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    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 :
    1
    2
    3
    4
    5
    6
    
    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 :
    1
    2
    3
    4
    5
    6
    7
    
    A LEFT JOIN B ON A.A_ID = B.A_ID_FK
    A_NAME | B_ID
    -------------
    x      | 1
    x      | 2
    y      | NULL
    z      | 3
    thehasso bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  5. #5
    thehasso thehasso ist offline Mitglied Brokat
    Registriert seit
    Apr 2008
    Beiträge
    345
    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 :
    1
    2
    3
    4
    5
    
    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 :
    1
    2
    3
    4
    5
    6
    7
    
    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
     

  6. #6
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  7. #7
    thehasso thehasso ist offline Mitglied Brokat
    Registriert seit
    Apr 2008
    Beiträge
    345
    komisch, jetzt versteh ich gar nichts mehr.

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

    Code :
    1
    2
    3
    4
    5
    
    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 ?
     

  8. #8
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  9. #9
    thehasso thehasso ist offline Mitglied Brokat
    Registriert seit
    Apr 2008
    Beiträge
    345
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    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
     

Ähnliche Themen

  1. Freundesliste und JOINS
    Von lisali im Forum PHP
    Antworten: 0
    Letzter Beitrag: 30.07.09, 05:45
  2. Daten aus mehreren Tabellen über Joins anzeigen
    Von thinkpad im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 10.04.08, 13:08
  3. MySQL joins auf mehrere tabellen
    Von momo006 im Forum Relationale Datenbanksysteme
    Antworten: 6
    Letzter Beitrag: 07.11.07, 20:36
  4. mySQL Tabellen dynamisch mit JOINS verknüpfen
    Von gelleneu im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 16.07.07, 12:14
  5. Joins mit mehreren Tabellen
    Von jarkand im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 19.01.07, 18:31

Stichworte