Ihnen fehlt eine Join-Bedingung zwischen candidates
und jobs
, sodass Sie ein kartesisches Produkt zwischen beiden Tabellen erhalten. Außerdem gibt es ein Problem mit der Join-Bedingung für skill_names
, wobei beide Spalten gleich sind (dies erzeugt wiederum ein kartesisches Produkt).
SELECT can.* , co.*, j.*, sn.*
FROM candidates AS can
JOIN jobs AS j ON j.candidate_id = can.candidate_id --> here: missing join condition
JOIN companies AS co ON j.company_id = co.company_id
JOIN skills AS s ON s.job_id = j.job_id
JOIN skill_names AS sn ON sn.skill_id = s.skill_id --> and here: wrong join condition
Viele RDBMS würden bei einem JOIN
einen Syntaxfehler auslösen ohne ON
-Klausel (wenn Sie ein kartesisches Produkt wünschen, müssen Sie dies ausdrücklich angeben, indem Sie CROSS JOIN
verwenden ), aber leider nicht MySQL.
Wenn es um diese Frage geht:
Nein. Solange Sie inner join
verwenden s (nicht left join
s), spielt die Verknüpfungsreihenfolge für den Abfrageplaner keine Rolle, der sie in der Reihenfolge anordnet, die er für effizienter hält.