如何解决PostgreSQL 相当于 Pandas 外部合并
我试图在 Postgres 中做相当于 Pandas 的外部合并,以便外部合并两个表。
表 df_1
包含以下数据:
表 df_2
包含以下数据:
因此表 df_1
比 random_id
多出一列 (df_2
)。此外,df_1
和 df_2
中都存在 job_id 1711418 和 worker_id 45430。
如果我在 Pandas 中使用“外部合并”方法:
df_1.merge(df_2,on=['job_id','worker_id'],how='outer')
,我会得到如下所示的理想结果:
但是,我无法找到与 Pandas 外部合并方法等效的 SQL (postgres)。
我尝试运行以下查询:
select *
from df_1
full outer join df_2
on df_1.job_id = df_2.job_id
and df_1.worker_id = df_2.worker_id
但是,结果生成了 2 个额外的重复列,名为 job_id_duplicate_column_name_1
和 worker_id_duplicate_column_name_1
,我不想要它们:
谁能帮忙提出一种查询方法,可以实现与 Pandas 中的外部合并方法相同的效果?
解决方法
对我来说这看起来像是 UNION,而不是 JOIN:
select job_id,worker_id,random_id
from df_1
union all
select job_id,'NaN'
from df_2 d2
where not exists (select *
from df_1 d1
where d1.job_id = d2.job_id
and d1.worker_id = d2.worker_id)
联合的第二部分返回 df_2
中不存在于 df_1
中的所有行
另一种方法是使用 EXCEPT
从 df_2 中获取 df_1
中不存在的行
select job_id,'NaN'
from
(
select job_id,worker_id
from df_2 d2
except
select job_id,worker_id
from df_1
) t
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。