2009-09-13 7 views
5

मैं दो तालिकाओंएसक्यूएल: झरना यूनिअन और शामिल हों

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

मैं एक मेज के साथ या यहां तक ​​कि सभी TABLE_1 के साथ इस UNION आपरेशन के परिणाम में शामिल करना चाहते के बीच एक संघ opertaion है।

मैं UNION के इस नए तालिका परिणाम को कैसे संभाल सकता हूं।

पिछले UNION के बाद उदाहरण के लिए

:

RIGHT JOIN TABLE_3 
     ON TABLE_3.ID_3 = XXXXXXXXXXXXXXXXXXXX.ID_2 

मैं वास्तव में मैं क्या xxxxxxxxxxxxxxxx के बजाय डाल करने के लिए UNION द्वारा उत्पन्न नई तालिका andle करने की जरूरत है पता नहीं है।

उत्तर

12

"foo" यहाँ की तरह एक व्युत्पन्न तालिका का उपयोग करें, और उसके बाद फिर से शामिल होने जैसा आप चाहते हैं:

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 

पी एस। बाएं जुड़ें का प्रयोग करें: कम उलझन में फिर राइट जुड़ता है।

+2

और मैं आदेश परिणाम छँटाई से बचने के लिए यूनिअन सभी के बजाय सिर्फ यूनिअन का प्रयोग करेंगे, क्योंकि आप जानते हैं वे अलग हैं (टेबल T_ONE और TABLE_2 से डेटा ओवरलैप नहीं करते हैं, क्या वे करते हैं?) – van

+0

@ वैन: हम इसे नहीं मान सकते हैं, लेकिन यह एक अच्छा बिंदु है। संपादित। – gbn

+0

मुझे इसी तरह की समस्या का सामना करना पड़ रहा है, यूनियनों को छोड़कर शीर्ष पर हैं, और मैं सही शामिल नहीं हो सकता क्योंकि यह वर्तमान में मंच पर समर्थित नहीं है। क्या पहले चयन पर यूनियनों के साथ बाएं जुड़ने के लिए इसे पुन: स्थापित करना संभव है? –

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 

या कुछ इस तरह। मत भूलना कि एक संघ डुप्लिकेट समाप्त, अगर आप चाहते हैं, शामिल किया जाना है इसलिए डुप्लिकेट यूनिअन uyse सभी

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 
संबंधित मुद्दे