Python SQLAlchemy+;MySQL加入了奇怪的行为

Python SQLAlchemy+;MySQL加入了奇怪的行为,python,mysql,sql,flask,sqlalchemy,Python,Mysql,Sql,Flask,Sqlalchemy,跟着 我注意到ORM生成的原始sql语句将.join转换为未指定的sqljoin 在sql命令行中运行此生成的语句将返回意外的结果,但将LEFT添加到每个join in语句将使结果正确 正如我在MySQL中所知道的,LEFT是可选的,所以显式添加它没有意义,那么为什么结果会不同呢 错误在哪里?左连接和连接(也称为内部连接)是不同的操作 LEFT JOIN返回JOIN返回的内容,并为左参数中的每个不匹配行加上一行。对于右参数的每一列,添加的行看起来像是由NULL扩展的不匹配行 JOIN计算从左参数

跟着

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

在sql命令行中运行此生成的语句将返回意外的结果,但将
LEFT
添加到每个join in语句将使结果正确

正如我在MySQL中所知道的,LEFT是可选的,所以显式添加它没有意义,那么为什么结果会不同呢

错误在哪里?

左连接和连接(也称为内部连接)是不同的操作

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

JOIN计算从左参数扩展到右参数的行的所有可能的行组合,然后只保留与ON条件匹配的行。交叉连接类似于1=1上的连接


(在MySQL中,联接可以没有ON,这意味着交叉联接。)

left
是可选的,但是如果省略,联接就是内部的
(至少在sql server中,我假设MySQL也是)。显然,
内部连接
可能会产生与
左连接不同的结果
什么是“预期”结果?@philipxy,我从初始原始SQL查询中得到的结果。