在不同的列上完全连接两个表

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