sql—完全联接非相同列上的两个表

cetgtptt  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(364)

假设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?

dgtucam1

dgtucam11#

你想要完全加入。可以使用以下方法进行模拟:

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)
yc0p9oo0

yc0p9oo02#

不清楚你在用什么数据库。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

相关问题