SQL连接不同长度的列

时间:2019-09-27 12:57:00

标签: sql database join sas

我正在尝试在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

我希望我已经足够清楚地解释了我的问题,在此先感谢您的帮助。

2 个答案:

答案 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值。