2009-09-13 67 views
5

我有兩個表SQL:級聯UNION和JOIN

SELECT ID_1, 
     name_1, 
     surname_1, 
    FROM T_ONE 
UNION 
SELECT ID_2, 
     name_2, 
     surname_2 
    FROM TABLE_2 

我想加入與另一個表或即使所有TABLE_1UNION操作的結果之間的聯合opertaion。

我該如何處理這個UNION的新表結果。

例如前面UNION後:

RIGHT JOIN TABLE_3 
     ON TABLE_3.ID_3 = XXXXXXXXXXXXXXXXXXXX.ID_2 

我真的不知道我需要把XXXXXXXXXXXXXXXX而不是到andle由UNION產生的新表。

回答

12

使用派生的表像 「富」 在這裏,並且按照自己的希望,然後再次加入:

SELECT 
    * 
FROM 
    TABLE_3 
    LEFT JOIN 
    (
    SELECT ID_1, name_1, surname_1, FROM T_ONE 
    UNION --ALL would be more efficient if results do not overlap, as van's comment said 
    SELECT ID_2, name_2, surname_2 FROM TABLE_2 
    ) foo ON TABLE_3.ID_3 = foo.ID_1 

PS。使用LEFT連接:減少混淆,然後RIGHT加入。

+2

,我會使用UNION ALL而不是隻UNION爲了避免排序結果,因爲你知道它們是不同的(表T_ONE和TABLE_2中的數據不重疊,是嗎?) – van 2009-09-13 18:14:42

+0

@Van:我們不能認爲這是一個好的觀點。編輯。 – gbn 2009-09-13 18:16:34

+0

我面臨類似的問題,除了工會在頂部​​,我不能使用正確的加入,因爲它目前不支持在平臺上。是否有可能重構它以在第一次選擇時使用與工會的左連接? – 2013-12-20 11:44:55

1

您需要提供兩種選擇聯接:

SELECT ID_1, name_1, surname_1, FROM T_ONE 
RIGHT JOIN TABLE_3 ON TABLE_3.ID_3 = T_ONE.ID_1 

UNION 

SELECT ID_2, name_2, surname_2 FROM TABLE_2 
RIGHT JOIN TABLE_3 ON TABLE_3.ID_3 = TABLE_2.ID_2 

或者類似的東西。不要忘記,一個UNION消除重複的,所以如果你想被列入重複,uyse UNION ALL

2
SELECT ID_1, name_1, surname_1, FROM T_ONE 

from 
(SELECT ID_1, name_1, surname_1, FROM T_ONE 
UNION 
SELECT ID_2, name_2, surname_2 FROM TABLE_2) foo 

left join TABLE_3 

ON TABLE_3.ID_3 =foo.ID_2