Mysql
 sql >> Database >  >> RDS >> Mysql

Perché la mia query restituisce molti risultati?

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.