Está faltando uma condição de associação entre
candidates
e jobs
, então você obtém um produto cartesiano entre as duas tabelas. Além disso, há um problema com a condição de junção em skill_names
, onde ambas as colunas são iguais (isso novamente gera um produto cartesiano). 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
Muitos RDBMS gerariam um erro de sintaxe em um
JOIN
sem um ON
cláusula (se você quiser um produto cartesiano, você precisa ser explícito sobre isso usando CROSS JOIN
), mas, infelizmente, não MySQL. Quando se trata desta questão:
Não. Desde que você esteja usando
inner join
s (não left join
s), a ordem de junção não importa para o planejador de consultas, que as reorganizará na ordem que julgar mais eficiente.