zwei Bedingungen aus der selben Mysql Tabelle
Mike
- datenbank
Folgende Tabelle habe ich
id ! titel ! city ! country 1 ! inhalt ! 1 ! 3 2 ! inhalt ! 2 ! 3 3 ! inhalt ! 4 ! 3
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
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.
id ! titel ! city 1 ! inhalt ! 1 2 ! inhalt ! 2 3 ! inhalt ! 4
id ! titel ! land 1 ! berlin ! 1 2 ! koeln ! 1 3 ! munich ! 1 4 ! paris ! 2
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
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
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.