在不同的列上完全连接两个表
Full join two tables on a nonidentical column
假设 T1 是
id val1
1 10
2 20
而 T2 是
id val2
1 100
3 300
我想做
id val1 val2
1 10 100
2 20 null
3 null 300
我使用的命令是
select T1.id, T1.val1, T2.val2 from T1 full join T2 on T1.id=T2.id
结果是
id val1 val2
1 10 100
2 20 null
null null 300
缺少 id=3。我应该在 select 命令中使用什么而不是 T1.id 来获取所有 ID 而不仅仅是来自 T1 的 ID?
您想要完全加入。你可以用这个方法模拟它:
select t1.id, t1.val1, t2.val2
from t1 left join
t2
on t1.id = t2.id
union all
select t2.id, null, t2.val2
from t2 left join
t1
on t1.id = t2.id
where t1.id is null;
如果您的数据库支持 full join
,您可以使用:
select coalesce(t1.id, t2.id) as id, t1.val1, t2.val2
from t1 full join
t2
on t1.id = t2.id;
或:
select id, t1.val1, t2.val2
from t1 full join
t2
using (id)
不清楚您使用的是什么数据库。 MySQL 不支持 FULL JOIN
,但你似乎在使用它。如果支持,则需要在键列中使用 COALESCE()
。您的查询应如下所示:
select coalesce(T1.id, T2.id) as id, T1.val1, T2.val2
from T1
full join T2 on T1.id = T2.id
假设 T1 是
id val1
1 10
2 20
而 T2 是
id val2
1 100
3 300
我想做
id val1 val2
1 10 100
2 20 null
3 null 300
我使用的命令是
select T1.id, T1.val1, T2.val2 from T1 full join T2 on T1.id=T2.id
结果是
id val1 val2
1 10 100
2 20 null
null null 300
缺少 id=3。我应该在 select 命令中使用什么而不是 T1.id 来获取所有 ID 而不仅仅是来自 T1 的 ID?
您想要完全加入。你可以用这个方法模拟它:
select t1.id, t1.val1, t2.val2
from t1 left join
t2
on t1.id = t2.id
union all
select t2.id, null, t2.val2
from t2 left join
t1
on t1.id = t2.id
where t1.id is null;
如果您的数据库支持 full join
,您可以使用:
select coalesce(t1.id, t2.id) as id, t1.val1, t2.val2
from t1 full join
t2
on t1.id = t2.id;
或:
select id, t1.val1, t2.val2
from t1 full join
t2
using (id)
不清楚您使用的是什么数据库。 MySQL 不支持 FULL JOIN
,但你似乎在使用它。如果支持,则需要在键列中使用 COALESCE()
。您的查询应如下所示:
select coalesce(T1.id, T2.id) as id, T1.val1, T2.val2
from T1
full join T2 on T1.id = T2.id