Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi ma requête renvoie-t-elle beaucoup de résultats ?

Il manque une condition de jointure entre candidates et jobs , vous obtenez donc un produit cartésien entre les deux tables. De plus, il y a un problème avec la condition de jointure sur skill_names , où les deux colonnes sont identiques (cela génère à nouveau un produit cartésien).

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

De nombreux SGBDR soulèveraient une erreur de syntaxe sur un JOIN sans ON clause (si vous voulez un produit cartésien, vous devez être explicite à ce sujet en utilisant CROSS JOIN ), mais, hélas, pas MySQL.

En ce qui concerne cette question :

Non. Tant que vous utilisez la inner join s (et non left join s), l'ordre de jointure n'a pas d'importance pour le planificateur de requêtes, qui les réorganisera dans l'ordre qu'il juge le plus efficace.