none
INNER JOIN mehrerer Spalten aus Tabelle A mit einer Spalte aus Tabelle B RRS feed

  • Frage

  • Hallo,

    ich versuche zwei Tabellen mit Inner Join zu verknüpfen. Dabei befinden sich in der Tabelle "Rezept" die Spalten "Artikel_ID_01" bis "Artikel_ID_99". Diese Spalten möchte ich mit der Tabelle "Artikel" verknüpfen, in der passend zur Artikel_ID die Artikel Einheit steht.

    Für einen Artikel ist das kein Problem, aber für mehrer Artikel schon:

    SELECT        TAB_Artikel.Artikel_ID, TAB_Rezept.Rezept_ID, TAB_Artikel.Nr, TAB_Artikel.Artikel_Bezeichnung
    FROM            TAB_Artikel INNER JOIN
                             TAB_Rezept ON TAB_Artikel.Artikel_ID = TAB_Rezept.Artikel_ID_01
    WHERE TAB_Rezept.Rezept_ID = 1

    Diese Abfrage für eine Spalte aus der Tabelle Rezept liefert mir die passenden Werte. Jedoch benötige ich einen SQL Befehl, der mir alle passenden Werte für die Spalten "TAB_Rezept.Artikel_ID_01" bis "TAB_Rezept.Artikel_ID_99" liefert

    Montag, 18. Juli 2016 12:56

Antworten

  • Hallo,

    das hört sich nach einem schlechten Tabellen-Design an, das Du hier die Artikel 1-99 in der Tabelle speicherst, statt eine 1-n Tabelle anzulegen.

    So mit Deiner Tabellenstruktur musst Du nun 99 mal die Artikel-Tabelle ran joinen und entsprechende Aliase wie ART1, ART2 vergeben, also so

    SELECT TAB_Rezept.Rezept_ID, 
           ART1.Artikel_ID AS Art1ID
           ART1.Nr AS Art1Nr,
           ART1.Artikel_Bezeichnung AS Art1Bez,
           ART2.Artikel_ID AS Art2ID
           ART2.Nr AS Art2Nr,
           ART2.Artikel_Bezeichnung AS Art2Bez
     FROM TAB_Rezept AS RZ
          LEFT JOIN
          TAB_Artikel AS ART1
              ON TART2.Artikel_ID = RZ.Artikel_ID_01
          LEFT JOIN
          TAB_Artikel AS ART2
              ON ART2.Artikel_ID = RZ.Artikel_ID_01
     WHERE RZ.Rezept_ID = 1


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Montag, 18. Juli 2016 13:17

Alle Antworten

  • Hallo,

    das hört sich nach einem schlechten Tabellen-Design an, das Du hier die Artikel 1-99 in der Tabelle speicherst, statt eine 1-n Tabelle anzulegen.

    So mit Deiner Tabellenstruktur musst Du nun 99 mal die Artikel-Tabelle ran joinen und entsprechende Aliase wie ART1, ART2 vergeben, also so

    SELECT TAB_Rezept.Rezept_ID, 
           ART1.Artikel_ID AS Art1ID
           ART1.Nr AS Art1Nr,
           ART1.Artikel_Bezeichnung AS Art1Bez,
           ART2.Artikel_ID AS Art2ID
           ART2.Nr AS Art2Nr,
           ART2.Artikel_Bezeichnung AS Art2Bez
     FROM TAB_Rezept AS RZ
          LEFT JOIN
          TAB_Artikel AS ART1
              ON TART2.Artikel_ID = RZ.Artikel_ID_01
          LEFT JOIN
          TAB_Artikel AS ART2
              ON ART2.Artikel_ID = RZ.Artikel_ID_01
     WHERE RZ.Rezept_ID = 1


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Montag, 18. Juli 2016 13:17
  • Hallo.

    Wie sollte deiner Meinung nach das Tabellen Design dann aussehen?

    Montag, 18. Juli 2016 13:49
  • Eine Tabelle für die Rezepte, eine Tabelle für die Artikel und eine 1:n Tabelle, zu welchem Rezept welche Artikel gehören, dann bist Du auch nicht auf max 99 Artikel je Rezept gegrenzt.

    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Montag, 18. Juli 2016 14:38