Manca una condizione di partecipazione tra candidates
e jobs
, quindi ottieni un prodotto cartesiano tra i due tavoli. Inoltre, c'è un problema con la condizione di unione su skill_names
, dove entrambe le colonne sono uguali (questo genera ancora un prodotto 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
Molti RDBMS genererebbero un errore di sintassi su un JOIN
senza un ON
clausola (se vuoi un prodotto cartesiano, devi essere esplicito al riguardo usando CROSS JOIN
), ma, ahimè, non MySQL.
Quando si tratta di questa domanda:
No. Finché utilizzi inner join
s (non left join
s), l'ordine di unione non ha importanza per il pianificatore di query, che li riorganizzerà nell'ordine che ritiene più efficiente.