Mike: zwei Bedingungen aus der selben Mysql Tabelle

Folgende Tabelle habe ich

table1

id ! titel ! city ! country 1  ! inhalt !  1   !  3 2  ! inhalt !  2   !  3 3  ! inhalt !  4   !  3

table2

id ! titel 1  ! berlin 2  ! koeln 3  ! germany 4  ! munich

Das Ziel ist es eine SELECT Abfrage zu erstellen die table1 ausgibt, aber stadt den Zahlen bei city und country die titel aus der table2

id ! titel ! city     ! country 1  ! inhalt ! berlin   !  germany 2  ! inhalt ! koeln    !  germany 3  ! inhalt ! munich   !  germany

folgendes habe ich bis jetzt.

SELECT a.titel, b.titel AS city FROM table1 a, table2 b WHERE a.city =b.id

bis hier her geht es auch. Dcoh mir kommt keine Idee wie icj die zweite Abfrage integrieren kann.

a.contry =b.id

weil wenn ich diese einfach hinter die WHERE Bedingung mache, hebelt sie sich ja gegenseiten aus

  1. Hallo

    Folgende Tabelle habe ich

    table1

    id ! titel ! city ! country 1  ! inhalt !  1   !  3 2  ! inhalt !  2   !  3 3  ! inhalt !  4   !  3

    table2

    id ! titel 1  ! berlin 2  ! koeln 3  ! germany 4  ! munich

    Alle Datensätze sind Städte, bis auf einen, der ein Land bezeichnet (wenn es denn bei diesem Datenbestand bleibt). Das passt nicht zusammen. Insbesondere lässt sich nicht zuverlässig ermitteln, welcher der Datensätze ein Land und welcher eine Stadt bezeichnet.

    Erstelle stattdessen eine dritte Tabelle, die die Länder enthält und verweise aus der Städtetabelle auf die ID des Landes. Die Spalte country fliegt dafür aus table1 raus, weil diese Beziehung zwischen table2 und table3 hergestellt wird.

    table1

    id ! titel  ! city 1  ! inhalt ! 1 2  ! inhalt ! 2 3  ! inhalt ! 4

    table2

    id ! titel  ! land 1  ! berlin ! 1 2  ! koeln  ! 1 3  ! munich ! 1 4  ! paris  ! 2

    table3

    id ! titel 1  ! germany 2  ! france

    Das Ziel ist

    id ! titel  ! city   ! country 1  ! inhalt ! berlin ! germany 2  ! inhalt ! koeln  ! germany 3  ! inhalt ! munich ! germany

    -- aus der hohlen Hand und daher ungetestet
    SELECT
    table1.id,
    table1.titel,
    table2.titel AS city,
    table3.country
    FROM table3
      INNER JOIN (table1
        INNER JOIN table2
          ON table1.city = table2.id)
        ON table3.id = table2.land;
    

    Tschö, Auge

    --
    Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war. Terry Pratchett, "Wachen! Wachen!" ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
    1. Hallo

      Och Mist, irreführende Namensvergabe!

      -- aus der hohlen Hand und daher immer noch ungetestet
      SELECT
      table1.id,
      table1.titel,
      table2.titel AS city,
      table3.titel AS country
      FROM table3
        INNER JOIN (table1
          INNER JOIN table2
            ON table1.city = table2.id)
          ON table3.id = table2.land;
      

      Tschö, Auge

      --
      Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war. Terry Pratchett, "Wachen! Wachen!" ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
  2. Tach!

    Das Ziel ist es eine SELECT Abfrage zu erstellen die table1 ausgibt, aber stadt den Zahlen bei city und country die titel aus der table2

    Correlated Subquery, und die zweimal. SEELCT felder der ersten Tabelle, (SELECT titel FROM table2 WHERE id=table1.city), (SELECT ...) FROM table1;

    Eine Alternative dazu wäre, zweimal die table2 zu joinen. Die Subquery ist aber bei nur einem abzufragenden Feldinhalt ausdrucksstärker. Sie ist eine kompakte Abfrage und verteilt sich nicht über mehrere Klauseln. Wenn mehr als das eine Feld title abzufragen wäre, kann man mehrere Subquerys nehmen, aber das wird dann auch schnell umfangreicher als ein Join.

    bis hier her geht es auch. Dcoh mir kommt keine Idee wie icj die zweite Abfrage integrieren kann. a.contry =b.id weil wenn ich diese einfach hinter die WHERE Bedingung mache, hebelt sie sich ja gegenseiten aus

    Wenn du deinen Weg weitergehen möchtest, musst du table2 nochmal ins FROM aufnehmen und beispielsweise den Alias c vergeben.

    dedlfix.