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

Sql 完全联接非相同列上的两个表,sql,outer-join,Sql,Outer Join,假设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 va

假设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;
如果您的数据库支持
完全联接
,则可以使用以下任一方法:

select coalesce(t1.id, t2.id) as id, t1.val1, t2.val2
from t1 full join
     t2
     on t1.id = t2.id;
或:


还不清楚你在用什么数据库。MySQL不支持
完全连接
,但您似乎正在使用它。如果支持,则需要在键列中使用
COALESCE()
。您的查询应该如下所示:

select coalesce(T1.id, T2.id) as id, T1.val1, T2.val2 
from T1 
full join T2 on T1.id = T2.id

如果您从
完全连接中得到一个结果,那么您没有使用MySQL。请正确标记您的问题。您使用的是什么数据库?好像不是MySQL,我用的是MS SQL Server。感谢您指出“完全连接”在MySQL中不起作用。我取下了标签。
select coalesce(T1.id, T2.id) as id, T1.val1, T2.val2 
from T1 
full join T2 on T1.id = T2.id