2011-06-13 77 views
3

我有兩個表:
T1
1,
2,B我如何完全加入Mysql?

T2
2,GGG
3,HHH

我想將它們之間的連接給我所有的領域:

1,a,null,null
2,b,2,ggg
null,null,3,hhh

+0

這些不是所有的組合。預期的結果究竟是什麼? – Alp 2011-06-13 17:30:10

+0

@Alp:就'FULL OUTER'而言,沒有什麼更多。 – 2011-06-13 18:08:30

回答

4

的MySQL doesn'tFULL OUTER JOIN,但你可以效仿例如:

SELECT * FROM T1 LEFT OUTER JOIN T2 ON T1.id = T2.id 
UNION ALL 
SELECT * FROM T1 RIGHT OUTER JOIN T2 ON T1.id = T2.id 
    WHERE T1.id IS NULL; 

一般:

FULL OUTER JOIN = LEFT OUTER JOIN ∪ (RIGHT OUTER JOIN ∖ INNER JOIN) 

你需要削減一個內部連接(在這裏從右連接,但恕我直言並不重要你選擇哪一個),因爲兩者都返回內連接。在這裏你有:

T1:

enter image description here

T2:

enter image description here

LEFT OUTER JOIN:

enter image description here

RIGHT OUTER JOIN:

enter image description here

INNER JOIN:

enter image description here

FULL OUTER JOIN:

enter image description here

0

如果這些表具有唯一的(組合)列,那麼您可以在子查詢中構建一個id列表。然後,你可以用兩個外部連接來模擬一個完整的外部聯接:

select * 
from (
     select col1 
     from t1 
     union 
     select col1 
     from t2 
     ) ids 
left join 
     t1 
on  ids.col1 = t1.col1 
left join 
     t2 
on  ids.col1 = t2.col1 
+0

是什麼?沒有內置的命令呢? – 2011-06-13 17:30:13