2012-03-18 43 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解決方案像一個魅力。