candidates
間の結合条件がありません およびjobs
、したがって、両方のテーブルの間にデカルト積が得られます。また、skill_names
の結合条件に問題があります 、両方の列が同じです(これにより、デカルト積が再び生成されます)。
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
多くのRDBMSは、JOIN
で構文エラーを発生させます ON
なし 句(デカルト積が必要な場合は、CROSS JOIN
を使用して明示的にする必要があります )、しかし、残念ながら、MySQLではありません。
この質問に関しては:
いいえ。inner join
を使用している限り s(left join
ではありません s)、結合順序はクエリプランナーには関係ありません。クエリプランナーは、より効率的であると考える順序でそれらを再配置します。