Korrekter SELECT-Befehl WHERE oder Join?

Maximus

Erfahrenes Mitglied
Hallo,

ich stehe vor folgendem Problem:

Aufbau Table1: ID, Name
Aufbau Table2: ID, Name1, Name2, Datum

Das Abfrageergebnis soll jetzt zurückgeben:

Table2.Datum, Table2.ID sowie Table1.Name in Relation zu Table2.Name1 und Tabl2.Name2.

Beispiel:
Table1: 1, Fritz | 2, Hans | 3, Willi | 4, Günther
Table2: 1,1,2,2013-11-11 | 2,3,4,2013-11-12

Gewünschte Ergebnisse:
2013-11-11, 1, Fritz, Hans | 2013-11-12, 2, Willi, Günther

Kann mir bitte jemand sagen wir dafür der SQL-Befehl aussehen müsste?
Stehe da leider total auf dem Schlauch.

Danke!

Maxi
 
Zuletzt bearbeitet:
Ahoi TribunMaximus
Du musst die Tabelle1 2 mal Mit Join an die Tabelle2 verknüpfen. Dazu brauchst du Aliase.
SQL:
SELECT
  t1a.datum,
  --  die anderen t1a Felder
  t1b.datum,
  --  die anderen t1b Felder
FROM
  table2  AS t2
  LEFT JOIN table1 AS t1a ON t1a.id = t1.id
  LEFT JOIN table1 AS t1b ON t1b.id = t2.id

01.06.2015: Im zweiten JOIN t1 durch t2 ersetzt
 
Zuletzt bearbeitet:
Hey Yaslaw,

habe genau das gleiche Problem. Ich muss eine Tabelle 2x mit einer anderen verknüpfen und habe Deine Syntax 1:1 umgemünzt auf meine Bezeichnungen. Allerdings kam eine Fehlermeldung, die mich nicht wirklich gewundert hat: t1.id wird als unbekannt angemeckert

Hier meine Variante:

Code:
"SELECT
                c1.nachname,
                c2.nachname
               
               
           
            FROM
                jumps AS j
            LEFT JOIN customer AS c1 ON j.jumper_id = customer.id
            LEFT JOIN customer AS c2 ON j.jump_payment = customer.id
        "

Aus der Tabelle "customer" soll einmal der Nachname des Bestellers gezogen werden und die ID ersetzen und so zweiten der Nachname des Bezahlers.

Es scheitert aber an der Definition von customer.id, bzw. in Deinem Fall an t1.id.

Hast du ne Idee? Danke.
 
Du hast nit 1:1 umgesetzt. Was soll das customer in den ON-Teilen der Syntax?

Nun gut, auch meine Syntax hat ein Fehler. Der 2te Join sollte natürlich auf t2.id gehen. Ich habs jetzt korrigiert
 
customer ist meine Tabelle, wo die Kundendaten abgelegt sind, also vergleichbar mit der table1.

Aber die Frage ist doch immer noch, wo in deiner Syntax "t1" definiert wird, wenn die beiden Tabellen doch table1 bzw. table2 heißen? Du definiert doch lediglich einen Alias für table2 in der FROM clause. Und table1 wird mit den beiden Aliasen t1a bzw. t1b definiert, aber nicht mit t1.
 
Sorry, mein Chaos.
Lassen wir das Beispiel weiter oben und schaeun uns deinen Code an.

Das folgende müsste gehen
Code:
FROM
    jumps AS j
    LEFT JOIN customer AS c1 ON j.jumper_id = c1.id
    LEFT JOIN customer AS c2 ON j.jump_payment = c2.id

customer solltest du nicht mehr verwenden, nachdem du einen Alias gesetzt hast.
 
Leider geht es nicht.

Hier nochmal mein Code:

Code:
$request = "SELECT
                c1.nachname,
                c2.nachname           
            FROM
                jumps AS j
            LEFT JOIN customer AS c1 ON j.jumper_id = c1.id
            LEFT JOIN customer AS c2 ON j.jump_payment = c2.id
        ";

das ECHO von c1.nachname meldet UNDEFINED INDEX c1.nachname.

Ich bin echt langsam ratlos.
 
Was geht nicht?
Wenn die Felder und Tabellen wirklich so heissen, dann stimmt das SQL.

Um die Felder abzurufen musst du ihnen aber noch den Spalten Sinnvolle Namen geben. Also auch wieder Aliase
SQL:
SELECT
    c1.nachname AS c1_nachname,
    c2.nachname AS c2_nachname
FROM ...

Dann kannst du auf c1_nachname abfragen.
 
Jetzt geht es. Es lag tatsächlich an den fehlenden Aliasses in der SELECT clause. Komisch, aber egal. Danke dir vielmals.
 

Neue Beiträge

Zurück