Python与SQL外连接给出不同的结果。为什么?

时间:2018-06-21 22:13:51

标签: python sql pandas join outer-join

我在理解Python(熊猫)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

Python代码:

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) 第二部分针对SQL总共产生4951行,对于Python产生4552行。我不知道。

一些线索: Python在不转换int64的情况下不允许我加入'idno'。 我以相同的方式对SQL和Python中的所有df进行了排序,以控制排序。

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

谢谢!

1 个答案:

答案 0 :(得分:1)

在您的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 = '外部')