Il manque une condition de jointure entre candidates
et jobs
, vous obtenez donc un produit cartésien entre les deux tables. De plus, il y a un problème avec la condition de jointure sur skill_names
, où les deux colonnes sont identiques (cela génère à nouveau un produit cartésien).
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
De nombreux SGBDR soulèveraient une erreur de syntaxe sur un JOIN
sans ON
clause (si vous voulez un produit cartésien, vous devez être explicite à ce sujet en utilisant CROSS JOIN
), mais, hélas, pas MySQL.
En ce qui concerne cette question :
Non. Tant que vous utilisez la inner join
s (et non left join
s), l'ordre de jointure n'a pas d'importance pour le planificateur de requêtes, qui les réorganisera dans l'ordre qu'il juge le plus efficace.