SQL, Problem mit drei Tabellen.



  • Hallo,

    ich habe drei Tabellen:

    1. Tabelle1

    | B |
    -----
    | 1 |
    | 2 |
    | 3 |

    1. Tabelle2

    | A | B | C |
    --------------
    | 1 | 1 | 22 |
    | 2 | 2 | 87 |
    | 3 | 2 | 37 |
    | 4 | 3 | 65 |

    1. Tabelle3

    | A | B | D |
    --------------
    | 1 | 1 | 98 |
    | 2 | 2 | 32 |
    | 3 | 2 | 32 |
    | 4 | 3 | 69 |

    Nun möchte ich mit einem sql-Befehl folgendes ausgeben:

    | B | D | C |
    ---------------
    | 1 | 98 | 22 |
    | 2 | 32 | 87 |
    | 2 | 32 | 37 |
    | 3 | 69 | 65 |

    Ich habe schon mehrmals versucht, aber es hat nie geklappt:

    z.B. Select Tabelle1.B, Tabelle2.D, Tabelle3.C from Tabelle1, Tabelle2, Tabelle3where Tabelle2.B = Tabelle3.B

    Hat jemand ne Idee?



  • Gib dem ganzen Mal Originalnamen, da stimmt was mit der 3. NF nicht. Wenn C und D hier eine 1:1 Verbindung über (A, 😎 haben gehören die beiden in eine Tabelle.

    Ansonsten kannst du über Tab2(A, 😎 = Tab3(A, 😎 das gewünschte Ergebnis bekommen. Tabelle 1 kannst du imho ganz ignorieren.

    Aber wie gesagt, ich glaube da hats schon ein Problem im Design. Immerhin musst du dich hier darauf verlassen, dass es für jede Zeile in Tab2 auch ein Äquivalent in Tab3 gibt. Totalmist 😃

    MfG SideWinder



    1. Restposten

    | Fenstertypen | Farbe | ...
    ----------------------------
    | 1 | weiß | ...
    | 2 | blau | ...
    | 3 | ... | ...

    1. 1.Hochhaus

    | Etagen | Fenstertypen | Anzahl Zimmer | ...
    ---------------------------------------------
    | 1 | 1 | 22 | ...
    | 2 | 2 | 87 | ...
    | 3 | 2 | 37 | ...
    | 4 | 3 | 65 | ...

    1. 2.Hochhaus

    | Fenstertypen | ...
    --------------------
    | 1 | ...
    | 2 | ...
    | 3 | ...

    1. 1.Hochhaus

    | Etagen | Fenstertypen | Anzahl Zimmer | ...
    ---------------------------------------------
    | 1 | 1 | 12 | ...
    | 2 | 2 | 47 | ...
    | 3 | 2 | 57 | ...
    | 4 | 3 | 89 | ...



  • Tschuldigung, so sollte das sein.

    1. Restposten

    | Fenstertypen | Farbe | ...
    ----------------------------
    | 1 | weiß | ...
    | 2 | blau | ...
    | 3 | ... | ...

    1. 1.Hochhaus

    | Etagen | Fenstertypen | Anzahl Zimmer | ...
    ---------------------------------------------
    | 1 | 1 | 22 | ...
    | 2 | 2 | 87 | ...
    | 3 | 2 | 37 | ...
    | 4 | 3 | 65 | ...

    1. 2.Hochhaus

    | Etagen | Fenstertypen | Anzahl Zimmer | ...
    ---------------------------------------------
    | 1 | 1 | 12 | ...
    | 2 | 2 | 47 | ...
    | 3 | 2 | 57 | ...
    | 4 | 3 | 89 | ...



  • Oh, gravierendes Problem, das ganze gehört alles in eine Tabelle:

    Entity: Wohnung
    ===============
    wohnung_id,
    haus_id references Haus(haus_id),
    etage,
    anzahl_zimmer,
    fenstertyp_id references Fenstertyp(fenstertyp_id),
    ...
    
    Entity: Haus
    ============
    haus_id,
    strasse,
    ...
    
    Entity: Fenstertyp
    ==================
    fenstertyp_id,
    farbe,
    ...
    

    Dann geht das SELECT auch ganz einfach mit SELECT * FROM Wohnung.

    MfG SideWinder



  • Ja, ich würde auch alles in eine Tabelle tun, aber die Tabellen sind fix, weil vorgegeben und der übersichtshalber getrennt. Daran kann ich nichts ändern. Idee?



  • SELECT Tabelle2.B, Tabelle3.D, Tabelle2.C
    FROM   Tabelle2 t2 inner join
           Tabelle3 t3 on (t2.B = t3.B)
    


  • select t2.B, t3.D, t2.C
      from Tabelle2 t2
      join Tabelle3 t3
     where t2.A = t3.A
       and t2.B = t3.B
    


  • @~Airdamn:

    wenn ich den code eingebe, dann kriege ich folgendes raus: [Microsoft][ODBC Microsoft Access Driver] Das angegebene Feld 'B' kann sich auf mehr als eine der Tabellen beziehen, die im FROM-Abschnitt der SQL-Anweisung angegeben werden.

    @tntnet: und wenn ich das eingebe, kriege ich auch eine Fehlermeldung.

    [Microsoft][ODBC Microsoft Access Driver] Syntaxfehler in FROM-Klausel.



  • Hab schon, danke:

    Select Tabelle1.B, Tabelle2.C, Tabelle3.D
    From (Tabelle3 Right join Tabelle1 on Tabelle3.B = Tabelle1.B) left join Tabelle2 on Tabelle1.B = Tabelle2.B



  • sqlerror schrieb:

    @tntnet: und wenn ich das eingebe, kriege ich auch eine Fehlermeldung.

    [Microsoft][ODBC Microsoft Access Driver] Syntaxfehler in FROM-Klausel.

    Ich hatte das einfach so aus dem Kopf ohne Test eingegeben. Da kommt so etwas schon vor. Das soll eher als Denkanstoß dienen und Denken solltest Du schon. Wenn Du genauer hinschaust, wirst Du bemerken, daß ich Tabelle1 gar nicht selektiert habe. Du benötigst nämlich keine Daten daraus.

    Deine Lösung sieht so aus, als hättest Du so lange mit left, right und join jongliert, bis der Server das verstanden hat. Aber offensichtlich verstehst Du nicht so ganz, was Du da machst. Du solltest Dir dringend mal ein SQL-Tutorial vor nehmen. Das spart auf Dauer ungemein Zeit.


Anmelden zum Antworten