SQLAlchemy + MySQL加入了奇怪的行为

时间:2016-01-11 10:22:31

标签: python mysql sql flask sqlalchemy

关注this question

我注意到ORM生成的原始sql语句将.join转换为未指定的SQL JOIN

在sql命令行中运行此生成的语句会返回意外结果,但在每个联接语句中添加LEFT会使结果正确。

正如我所知,MySQL LEFT是可选的,所以明确地添加它是没有意义的,那么为什么结果会有所不同呢?

错误在哪里?

1 个答案:

答案 0 :(得分:0)

LEFT JOIN和JOIN(又名INNER JOIN)是不同的操作。

LEFT JOIN返回JOIN返回的内容以及左参数中每个不匹配行的行。添加的行看起来像对于右参数的每一列,由NULL扩展的不匹配行。

JOIN计算由右参数的一行扩展的左参数的行的所有可能组合,然后仅保留与ON条件匹配的行。 CROSS JOIN就像JOIN ON 1 = 1。

(在MySQL中,JOIN可以没有ON,这意味着CROSS JOIN。)