2012-09-19 17 views
5

क्यों इसयूनिअन से पहले अंदरूनी शामिल हों

select some_table1.some_column1, 
      some_table1.some_column2 
    FROM some_table1 
    UNION ALL 
    select some_table2.some_column1, 
      some_table2.some_column2 
    FROM some_table2 
    INNER JOIN some_table3 
    ON some_table3.some_column1 = some_table1.some_column1 

की तरह शामिल हों जब मैं आंतरिक से पहले यूनिअन का उपयोग मैं एक eror है: पहचानकर्ता "some_table3.some_column1" बहु-भाग बाध्य नहीं कर सकता है? सभी डेटा प्रकार संगत हैं।

उत्तर

14

आपको एक त्रुटि मिल रही है क्योंकि यह मान्य SQL सिंटेक्स नहीं है। UNION ALL वाक्य रचना है:

SELECT <column1> 
FROM <table1> 
UNION ALL 
SELECT <column1> 
FROM <table2> 

आप या तो क्वेरी से स्तंभ संदर्भ नहीं दे सकता है जैसे आप क्या करने की कोशिश कर रहे हैं।

select * 
from 
(
    select some_table1.some_column1, some_table1.some_column2 
    FROM some_table1 
    UNION ALL 
    select some_table2.some_column1, some_table2.some_column2 
    FROM some_table2 
) t1 
INNER JOIN some_table3 
ON some_table3.some_column1 = t1.some_column1 
2

आप some_table1 से some_table3 में शामिल होने का प्रयास कर रहे हैं, जब some_table1 क्वेरी के दूसरे भाग में मौजूद नहीं है, केवल पहले।

2

मैं तुम्हें कुछ इस तरह के लिए जा रहे हैं अनुमान लगा रहा हूँ: आप का संदर्भ लेना चाहते हैं, तो आप कुछ इस तरह उपयोग करना चाहते हैं होगा?

SELECT 
(
     select some_table1.some_column1, 
       some_table2.some_column2 
     FROM some_table1 
     UNION ALL 
     select some_table2.some_column1, 
       some_table2.some_column2 
     FROM some_table2 
) sub 
     INNER JOIN some_table3 
     ON some_table3.some_column1 = sub.some_column1 
+0

हाँ, ऐसा लगता है कि मैं क्या चाहता हूं। जैसा कि मैं समझता हूं कि मुझे इनर जॉइन का उपयोग करने से पहले परिणाम समूह करना होगा? –

संबंधित मुद्दे