PostgreSQL 相当于 Pandas 外部合并

PostgreSQL equivalent of Pandas outer merge

我正在尝试在 Postgres 中执行相当于 Pandas 外部合并的操作,以便外部合并两个表。

Table df_1 包含这些数据:

Table df_2 包含这些数据:

所以 Table df_1df_2 多一列 (random_id)。此外,job_id 1711418 和 worker_id 45430 存在于 df_1df_2 中。

如果我在Pandas中使用“外部合并”方法: df_1.merge(df_2, on=['job_id', 'worker_id'], how='outer'),我会得到如下所示的理想结果:

但是,我找不到 SQL (postgres) 与 Pandas 外部合并方法等效的方法。

我试过运行以下查询:

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_1worker_id_duplicate_column_name_1,我不希望这样:

谁能帮忙推荐一个可以实现与Pandas中的外部合并方法相同的查询方法?

对我来说这看起来像是 UNION,而不是 JOIN:

select job_id, worker_id, random_id
from df_1
union all
select job_id, worker_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)

并集的第二部分 returns df_2 中不存在于 df_1

中的所有行

另一种方法是使用 EXCEPT 从 df_2 中获取 df_1

中不存在的行
select job_id, worker_id, random_id
from df_1
union all
select job_id, worker_id, 'NaN'
from 
(
  select job_id, worker_id
  from df_2 d2
  except
  select job_id, worker_id
  from df_1
) t

Online example