MichaelR: SQL-Query

Hallo,

Ich habe drei MySQL-Tabellen:
Aus den Tabellen K und T soll ein kartesisches Produkt gebildet werden:

SELECT CONCAT(K.Name, ' ', T.Name), K.InterneId, T.InterneId
FROM Tabelle_K AS K,
     Tabelle_T AS T
WHERE 1
ORDER BY K.Name, T.Name ASC;

Soweit kein Problem.
Aus der dritten Tabelle A sollen jetzt vorhandene Einträge dem Ergebnis aus dem obigen kartesischen Produkt zugeordnet werden -- ich dachte, das gehe mit einem LEFT JOIN wie folgt:

SELECT CONCAT(K.Name, ' ', T.Name), K.InterneId, T.InterneId,
       A.FristBeginn, A.FristEnde, A.FristRom, A.FristRomBeginn
FROM Tabelle_K AS K,
     Tabelle_T AS T
LEFT JOIN Tabelle_A AS A
  ON A.VK = K.InterneId AND A.VT = T.InterneId
WHERE 1
ORDER BY K.Name, T.Name ASC;

Aber MySQL meldet, dass es die Spalten K.InterneId und T.InterneId in der ON-Clause nicht kennt.

Wo liegt mein Denkfehler? Muss ich zwei separate Queries machen?

Grüße,
Michael

  1. yo,

    SELECT CONCAT(K.Name, ' ', T.Name), K.InterneId, T.InterneId
    FROM Tabelle_K AS K,
         Tabelle_T AS T
    WHERE 1
    ORDER BY K.Name, T.Name ASC;

    das WHERE 1 ist überflüssig...

    Aber MySQL meldet, dass es die Spalten K.InterneId und T.InterneId in der ON-Clause nicht kennt.

    hat was mit der reihenfolge bei joins zu tun, versuch es mal mit einem dummy INNER JOIN auszutricksen. wenn das nicht geht, kannst du das karthesische produkt als unterabfrage in die from klausel einbauen.

    SELECT CONCAT(K.Name, ' ', T.Name), K.InterneId, T.InterneId, A.FristBeginn, A.FristEnde, A.FristRom, A.FristRomBeginn
    FROM Tabelle_K AS K,
    INNER JOIN Tabelle_T AS T ON 1=1
    LEFT JOIN Tabelle_A AS A ON A.VK = K.InterneId AND A.VT = T.InterneId
    ORDER BY K.Name, T.Name ASC
    ;

    Ilja