Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

1:n Verknüpfung richtig ausgeben

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Notze, 12 Juli 2013.

  1. Notze

    Notze Neuer Benutzer

    Hallo Leute,

    ich habe zwei Tabellen erstellt die in einer 1:n-Relation stehen.
    Hier je ein Ausschnitt aus jeder Tabelle:

    Tabelle: "zutaten"
    Name | 1. Effekt | 2. Effekt | 3. Effekt | 4. Effekt
    Abeceanischer Mirakelbarsch | 48 | 3 | 4 | 37​
    Bärenklaue | 9 | 23 | 16 | 34​
    Berits Asche | 7 | 18 | 11 | 7​
    Biene | 1 | 6 | 7 | 9​
    Bienenstockhülle | 25 | 29 | 37 | 49​
    Blasenpilz | 7 | 24 | 17 | 39​
    Blaue Bergblume | 11 | 24 | 23 | 34​

    Tabelle: "effekte"
    ID | Effekt
    1 | Anfälligkeit für Blitz​
    2 | Anfälligkeit für Feuer​
    3 | Anfälligkeit für Frost​
    4 | Anfälligkeit für Gift​
    5 | Anfälligkeit für Magie​
    6 | Ausdauer regenerieren​
    7 | Ausdauer senken​
    8 | Ausdauer verstärken​
    9 | Ausdauer wiederherstellen​


    Jetzt möchte ich die Zutaten ausgeben und alle dazugehörigen Effekte angezeigt bekommen.
    Am liebsten wäre es mir wenn die Zahlen in "zutaten" mit den Bezeichnungen aus "effekte" ausgetauscht würden.

    Bis jetzt habe ich folgendes:

    Code:
    SELECT Name, Effekt
    FROM zutaten z
        LEFT JOIN effekte e
    ON z.Effekt1 = e.ID
        OR z.Effekt2 = e.ID
        OR z.Effekt3 = e.ID
        OR z.Effekt4 = e.ID
    Ausgabe:
    Name | Effekt
    Abeceanischer Mirakelbarsch | Anfälligkeit für Frost​
    Abeceanischer Mirakelbarsch | Anfälligkeit für Gift​
    Abeceanischer Mirakelbarsch | Schleichen verstärken​
    Abeceanischer Mirakelbarsch | Wiederherstellung verstärken​
    Bärenklaue | Ausdauer wiederherstellen​
    Bärenklaue | Einhändig verstärken​
    Bärenklaue | Gesundheit verstärken​

    Code:
    SELECT
        Effekt
    FROM zutaten z
        left join effekte e
        on z.Effekt2=e.ID
    Ausgabe:
    Effekt
    Anfälligkeit für Frost​
    Gesundheit verstärken​
    Feuerresistenz​
    Ausdauer regenerieren​
    Leichte Rüstung verstärken​
    Gesundheit wiederherstellen​
    Gesundheit wiederherstellen​

    Ist es möglich die Ausgaben zusammenzuführen und so mein gewünschtes Ergebnis zu erhalten?

    Grüße Notze ;D
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Sicher, 4 mal JOINen, dabei jedesmal einen Alias geben. Das schaffst Du. N Spalten, die wie bei Dir durchnummeriert sind, zeugen aber von einem offenbar schlechten Design. Was machst Du, wenn da eines Tages wenn ein 5. Effekt nötig ist?
     
  3. ukulele

    ukulele Datenbank-Guru

    Du hast es ja fast schon selbst richtig geschrieben:
    Code:
    SELECT    z.Name,
            e1.Effekt,
            e2.Effekt,
            e3.Effekt,
            e4.Effekt
    FROM    zutaten z
    LEFT JOIN effekte e1 ON z.Effekt1 = e1.ID
    LEFT JOIN effekte e2 ON z.Effekt2 = e2.ID
    LEFT JOIN effekte e3 ON z.Effekt3 = e3.ID
    LEFT JOIN effekte e4 ON z.Effekt4 = e4.ID
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Ach ukulele, ich wollt, das der Fragesteller selber *etwas* Mühe sich geben muß ;-)
     
  5. Notze

    Notze Neuer Benutzer

    Danke ihr beiden!

    @akretschmer: Bei den Datensätzen handelt es sich um die Alchemiezutaten aus dem Computerspiel Skyrim, dort hat jede Zutat immer genau 4 Effekte.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden