2012-03-18 39 views
1

我有这两个表SQL双向加入

表1:

tbl1

表2:

tbl2

,我想这个表作为的结果加入两张表

res

你能帮我正确的查询吗?

10X

+1

你正在使用哪些DBMS? – 2012-03-18 07:01:17

回答

2

使用full join子句和null检查使用任何可用的功能在你的DBMS(如isnull或​​3210),例如:

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 
+0

感谢快速回答Kirill 它对我来说就像一个魅力! – 2012-03-18 07:06:15

+0

@YosiHavia,欢迎光临。 – 2012-03-18 07:06:51

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 
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数据库有用。我看到甲骨文用一个完整的OUTER JOIN表现糟糕的表现,而上面的UNION ALL解决方案像一个魅力。