sql双向连接

时间:2012-03-18 06:57:30

标签: sql join

我有这两个表

表1:

tbl1

表2:

tbl2

我希望通过加入两个表来获得此表

res

你能帮我解决一下正确的问题吗?

10X

3 个答案:

答案 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中的任何可用功能(例如nullisnull)检查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解决方案就像魅力一样。