已关注 this question 。
我注意到 ORM 生成的原始 sql 语句将 .join
转换为未指定的 SQL JOIN
。
在 sql 命令行中运行此生成的语句会返回意外结果,但在每个 join in 语句中添加 LEFT
会使结果正确。
据我所知,在 MySQL 中 LEFT
是可选的,因此显式添加它没有任何意义,那么为什么结果不同呢?
哪里错了?
最佳答案
LEFT JOIN 和 JOIN(又名 INNER JOIN)是不同的操作。
LEFT JOIN 返回 JOIN 返回的内容以及左参数中每个不匹配行的一行。添加的行看起来像是为右侧参数的每一列用 NULL 扩展的不匹配行。
JOIN 计算左侧参数中的一行与右侧参数中的一行扩展的所有可能组合,然后仅保留与 ON 条件匹配的行。 CROSS JOIN 就像 JOIN ON 1=1。
(在 MySQL 中,JOIN 不能有 ON,这意味着 CROSS JOIN。)
关于python - SQLAlchemy + MySQL 加入奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34719072/