首页 > 解决方案 > Python 与 SQL 外连接给出了不同的结果。为什么?

问题描述

我在理解 Python (Pandas) FULL OUTER JOINS 和 Microsoft SQL Server 之间的区别时遇到了一些麻烦。在不深入数据的情况下,也许有人了解它们如何发挥不同作用的理论。我正在并行运行这两个代码,以确保它在我学习 Python 时工作。

SQL 代码:

SELECT *
FROM
    (
        SELECT *
        FROM df1 a
        FULL OUTER JOIN df2 b
        on a.id_no=b.idno
    ) abc
FULL OUTER JOIN df3 c
on abc.id_no=c.idno

蟒蛇代码:

TripleMerge = df1.merge(df2, left_on='id_no', right_on=df2['idno'].astype(np.int64), how='outer').merge(
        df3, left_on='id_no', right_on=df3['idno'].astype(np.int64), how='outer')

每个连接的第一部分给了我相同数量的行 (2323) 第二部分结果总共有 4951 行用于 SQL 和 4552 用于 Python。我想不通。

一些线索: Python 不会让我在不转换 int64 的情况下加入“idno”。我以相同的方式对 SQL 和 Python 中的所有 dfs 进行排序以控制排序。

如果您能想到任何可以调查的地方,请告诉我。或者,如果您知道如何更好地编写 Python 代码(或完全不同的方式来测试行输出,请告诉我)。

谢谢!

标签: pythonsqlpandasjoinouter-join

解决方案


在您的 python 示例中没有与 abc 选择等效的选项。很确定你的语法只是有点偏离那里。

在 SQL Server 中,您说的是进行此连接,然后将其连接到另一个表的值上。

尝试这个:

pd.merge(pd.merge(df1,df2,left_on='id_no', right_on='idno', how='outer'),df3,left_on='id_no', right_on='idno',how='outer' )


推荐阅读