您缺少
candidates和之间
jobs的联接条件,因此在两个表之间都得到了笛卡尔积。另外,在上的连接条件也存在问题
skill_names,其中两列都相同(这再次生成笛卡尔积)。
SELECt can.* , co.*, j.*, sn.*FROM candidates AS canJOIN jobs AS j ON j.candidate_id = can.candidate_id --> here: missing join conditionJOIN companies AS co ON j.company_id = co.company_idJOIN skills AS s ON s.job_id = j.job_idJOIN skill_names AS sn ON sn.skill_id = s.skill_id --> and here: wrong join condition
许多RDBMS都会在
JOIN不带
ON子句的a上引发语法错误(如果您确实想要笛卡尔乘积,则需要使用来明确指出它
CROSSJOIN),但是,可惜的是,不是MySQL。
当涉及到这个问题时:
加入表的顺序对速度有什么影响?
否。只要您使用
inner joins(而不是
leftjoins),连接顺序就对查询计划程序无关紧要,查询计划程序将按认为效率更高的顺序重新排列它们。



