Falta una condición de unión entre candidates
y jobs
, entonces obtienes un producto cartesiano entre ambas tablas. Además, hay un problema con la condición de unión en skill_names
, donde ambas columnas son iguales (esto nuevamente genera un producto 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
Muchos RDBMS generarían un error de sintaxis en un JOIN
sin un ON
cláusula (si desea un producto cartesiano, debe ser explícito al respecto usando CROSS JOIN
), pero, por desgracia, no MySQL.
Cuando se trata de esta pregunta:
No. Siempre que utilice inner join
s (no left join
s), el orden de combinación no le importa al planificador de consultas, que las reorganizará en el orden que considere más eficiente.