2009-09-17 61 views
3

假設我們有如下表T1和T2:MySQL的:左派的聯盟加入與右連接

t1: 
id | column_1 
------------- 
1 | 1 
2 | 2 

t2: 
id | column_2 
------------- 
2 | 2 
3 | 3 

,我們希望找到以下結果:

id | column_1 | column_2 
------------------------ 
1 | 1  | 
2 | 2  | 2 
3 |   | 3 

這基本上是右連接與左連接的結合。下面的代碼工作,但感覺笨拙:

(
    SELECT t1.id, t1.column_1, t2.column_2 
    FROM t1 
    LEFT JOIN t2 ON t1.id = t2.id 
) 
UNION 
(
    SELECT t2.id, t1.column_1, t2.column_2 
    FROM t1 
    RIGHT JOIN t2 ON t1.id = t2.id 
) 

有沒有更好的方法來實現這一目標?

+0

這裏的表,如果你想嘗試一下: CREATE TABLE IF NOT EXISTS't1'( 'id' INT(11)NOT NULL, 'column_1' INT( 11)NOT NULL ); (1,1), (2,2);插入到't1'('id',' CREATE TABLE IF NOT EXISTS't2'( 'id' int(11)NOT NULL, 'column_2' int(11)NOT NULL ); (2,2), (3,3);插入到't2'('id','column_2')值 – 2009-09-17 19:25:31

回答

7
select a.id, t1.column_1, t2.column_2 
from (
    select id from t1 
    union 
    select id from t2 
) a 
left outer join t1 on a.id = t1.id 
left outer join t2 on a.id = t2.id 
+0

確實很聰明! – 2009-09-17 20:46:04

0

還沒有嘗試過這個自己,但是這可能工作:

SELECT t1.id, t1.column_1, t2.column_2, t2a.column_2 
FROM t1  
LEFT JOIN t2 ON t1.id = t2.id 
RIGHT JOIN t2 AS t2a ON t1.id = t2a.id 
+0

這種返回4列,對嗎? – 2009-09-18 12:42:15