Chybí vám podmínka spojení mezi candidates
a jobs
, takže mezi oběma tabulkami získáte kartézský součin. Také je problém s podmínkou spojení na skill_names
, kde jsou oba sloupce stejné (to opět generuje kartézský součin).
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
Mnoho RDBMS by vyvolalo chybu syntaxe na JOIN
bez ON
klauzule (chcete-li kartézský produkt, musíte se o něm výslovně vyjádřit pomocí CROSS JOIN
), ale bohužel ne MySQL.
Když dojde na tuto otázku:
Ne. Pokud používáte inner join
s (nikoli left join
s), na pořadí spojení nezáleží pro plánovač dotazů, který je uspořádá v pořadí, které považuje za efektivnější.