我正在尝试在SQL中将两个表连接在一起,其中列包含不同数量的唯一条目。
当我使用完全联接时,联接的列中的其他条目将丢失。
我正在使用的代码是(在SAS proc SQL中):
proc sql;
create table table3 as
select table1.*, table2.*
from table1 full join table2
on table1.id = table2.id;
quit;
问题的直观示例(无法将实际表显示为包含敏感数据)
Table 1
id | count1
1 | 2
2 | 3
3 | 2
Table 2
id | count2
1 | 4
2 | 5
3 | 6
4 | 2
Table 3
id | counta | countb
1 | 2 | 4
2 | 3 | 5
3 | 2 | 6
- | - | 2 <----- I want don't want the id column to be blank in this row
我希望我已经足够清楚地解释了我的问题,在此先感谢您的帮助。
答案 0 :(得分:2)
表1中的ID为空,因为表2中的行在表1中不匹配。尝试查看此查询的输出:
select coalesce(table1.id, table2.id) as id, table1.count1, table2.count2
from table1 full join table2
on table1.id = table2.id;
Coalesce从左到右工作,返回第一个非null值(它可以使用2个以上的参数)。如果表1中的ID为空,则使用表2中的ID
我还建议对查询中的所有表都使用别名,所以我会这样写:
SELECT
COALESCE(t1.id, t2.id) as id,
t1.count1,
t2.count2
FROM
table1 t1
FULL OUTER JOIN
table2 t2
ON
t1.id = t2.id;
答案 1 :(得分:0)
只需选择coalesce(t1.id, t2.id)
,将返回第一个非空ID值。