Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Por que minha consulta está retornando muito para muitos resultados?


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.