我注意到ORM生成的原始sql语句将.join
转换为未指定的SQL JOIN
。
在sql命令行中运行此生成的语句会返回意外结果,但在每个联接语句中添加LEFT
会使结果正确。
正如我所知,MySQL LEFT
是可选的,所以明确地添加它是没有意义的,那么为什么结果会有所不同呢?
错误在哪里?
答案 0 :(得分:0)
LEFT JOIN和JOIN(又名INNER JOIN)是不同的操作。
LEFT JOIN返回JOIN返回的内容以及左参数中每个不匹配行的行。添加的行看起来像对于右参数的每一列,由NULL扩展的不匹配行。
JOIN计算由右参数的一行扩展的左参数的行的所有可能组合,然后仅保留与ON条件匹配的行。 CROSS JOIN就像JOIN ON 1 = 1。
(在MySQL中,JOIN可以没有ON,这意味着CROSS JOIN。)