我有这两个表
表1:
表2:
我希望通过加入两个表来获得此表
你能帮我解决一下正确的问题吗?
10X
答案 0 :(得分:3)
这将在ORACLE和SQL Server上执行;
SELECT COALESCE(a.id, b.id), COALESCE(a.a, 0), COALESCE(b.b, 0)
FROM table1 a
FULL OUTER JOIN table2 b
ON a.id=b.id
对于缺少OUTER JOIN的MYSQL,您需要稍微更改一下;
SELECT a.id, COALESCE(a.a, 0), COALESCE(b.b, 0)
FROM table1 a LEFT JOIN table2 b ON a.id=b.id
UNION
SELECT b.id, COALESCE(a.a,0), COALESCE(b.b, 0)
FROM table1 a RIGHT JOIN table2 b ON a.id=b.id
答案 1 :(得分:2)
使用full join
子句并使用您的DBMS中的任何可用功能(例如null
或isnull
)检查coalesce
,例如:
select isnull(t1.id, t2.id), isnull(t1.a, 0), isnull(t2.b, 0)
from table1 t1
full join table2 t2 on t2.id = t1.id
答案 2 :(得分:0)
已经发布了FULL OUTER JOIN解决方案。
对于不支持FULL OUTER JOIN(例如MySQL)的数据库,也发布了使用UNION的版本。
最好修改UNION查询以改为使用UNION ALL。诀窍是确保第二个外连接表中的NOT NULL列为NULL。
select table1.id table1.a, coalesce(table2.b,0) as b
from table1
left outer join table2 on table2.id=table1.id
union all
select table2.id coalesce(table1.a,0) as a, table2.b
from table2
left outer join table1 on table1.id=table2.id
where table1.id is null
UNION ALL解决方案甚至可能对支持FULL OUTER JOIN的数据库有用。我已经看到Oracle通过FULL OUTER JOIN表现不佳,而上面的UNION ALL解决方案就像魅力一样。