我有两个数据集:A和B
数据集A:
indiv_id January
1000068000004 1
1000068000011 1
1000068000012 1
数据集B:
indiv_id March
1000068000003 1
1000068000011 1
1000068000015 1
所需结果:
Indiv_id January March
1000068000003 null 1
1000068000004 1 null
1000068000011 1 1
1000068000012 1 null
1000068000015 null 1
如何连接表,以便同时拥有两个列表中的所有Indiv_IDs
及其在与特定数据集不同的列中的值?
谢谢
答案 0 :(得分:2)
您可以使用full join
:
select indiv_id, a.january, b.march
from a full join
b
using (indiv_id);
using
子句使此操作特别方便,因为您无需担心coalesce()
中的任何select
。
答案 1 :(得分:0)
您需要处理3种情况:两个数据集中都有ID,ID仅存在于数据集A中,或者ID仅存在于数据集B中。您无法用select ... from dataset_A left join dataset_B ...
解决此问题您会得到前两种情况,但不会得到第三种情况。
您需要定义一个视图,该视图为您提供两个数据集的所有ID,然后左键联接到每个数据集:
with all_IDs as (select indiv_ID from dataset_A union select indiv_ID from dataset_B)
select indiv_ID, january, march
from all_IDs
left join dataset_A using (indiv_ID)
left join dataset_B using (indiv_ID)