[英]sql join tables with same column names
有表1和表2,如何加入它们并创建表3? 似乎无论是左加入还是联合都不能解决问题。 谢谢!
表格1
Key Var1 Var2
1 A AA
2 B
3 C
4 DD
5 EE
表2
Key Var1 Var2
3 C CC
4 D DD
5 E EE
6 F FF
7 G GG
表3
Key Var1 Var2
1 A AA
2 B
3 C CC
4 D DD
5 E EE
使用coalesce()
返回第一个非空值
select t1.key,
coalesce(t1.var1, t2.var1) as var1,
coalesce(t1.var2, t2.var2) as var2
from table1 t1
left join table2 t2 on t1.key = t2.key
先前的答案实际上无法正常工作,因为它使用了内部联接:
select * from t1 where t1.key not in (select distinct key from t2)
UNION
select * from t2 where key not in (select distinct key from t1)
UNION
select t1.key,
coalesce(t1.var1, t2.var1) as var1,
coalesce(t1.var2, t2.var2) as var2
from table1 t1
join table2 t2 on t1.key = t2.key
以下代码将在SAS中完成,
/* The steps to create table 1 and 2 can be skipped if the Tables exist */
data table1;
infile datalines dsd dlm=' ' missover;
input Key Var1 $ Var2 $;
datalines;
1 A AA
2 B
3 C
4 DD
5 EE
;
run;
data table2;
infile datalines dsd dlm=' ' missover;
input Key Var1 $ Var2 $;
datalines;
3 C CC
4 D DD
5 E EE
6 F FF
7 G GG
;
run;
/* Sort the Dataset T1 and T2 */
proc sort data=table1; by key; run;
proc sort data=table2; by key; run;
/* Final Output */
data want;
merge table1(in=t1) table2(in=t2);
by key;
if t1; /* Keep only the records in Table 1 */
run;
Juergen击中了头部。 但是,如果您正在处理空字符串而不是null替代if(length(t1.var1)> 0,t1.var1,t2,var1)作为var1,if(length(t1.var2)> 0,t1.var2,t2 ,var2)作为var2,
合并是首选方法。 长度检查较慢
我已经重新创建了您的问题,并写了这个查询...
DECLARE @ta table (
id int,
var1 nvarchar(3),
var2 nvarchar(3)
)
DECLARE @tb table(
id int,
var1 nvarchar(3),
var2 nvarchar(3))
INSERT INTO @ta VALUES (1,'A','AA')
INSERT INTO @ta VALUES (2,'B','')
INSERT INTO @ta VALUES (3,'C','')
INSERT INTO @ta VALUES (4,'','DD')
INSERT INTO @ta VALUES (5,'','EE')
INSERT INTO @tb VALUES (3,'C','CC')
INSERT INTO @tb VALUES (4,'D','DD')
INSERT INTO @tb VALUES (5,'E','EE')
INSERT INTO @tb VALUES (6,'F','FF')
INSERT INTO @tb VALUES (7,'G','GG')
SELECT id, var1, var2 from @ta where id <> (
SELECT a.id from @ta AS a INNER JOIN @tb AS b on a.var1 = b.var1)
AND var1 <> ''
UNION
SELECT id, var1, var2 from @tb
我等待,此代码可以帮助您...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.