2010-02-22 12 views
64

मेरे पास दो टेबल हैं (तालिका ए और तालिका बी)।कॉलम की विभिन्न संख्याओं के साथ दो टेबल यूनियनिंग

इनके पास कॉलम की अलग-अलग संख्या है - कहें तालिका ए में अधिक कॉलम हैं।

मैं इन दो तालिकाओं को कैसे जोड़ सकता हूं और तालिका बी के कॉलम के लिए शून्य कैसे प्राप्त कर सकता हूं?

उत्तर

131

तरह

Select Col1, Col2, Col3, Col4, Col5 from Table1 
Union 
Select Col1, Col2, Col3, Null as Col4, Null as Col5 from Table2 
+2

क्या नल कॉलम के लिए डिफ़ॉल्ट मान भरने का कोई तरीका है? – Hans

+2

@ हंस: आप कॉलमनाम या इस्नुल (कॉलमनाम, '-') के रूप में कॉलमनाम या कुछ समान के रूप में isnull (ColumnName, 0) जैसे कुछ कर सकते हैं। – Kangkan

+3

आप यह भी कर सकते हैं: 'कुछ कस्टम मान' का चयन करें [Col1] ... –

4

मैं यहाँ आया था और जवाब से ऊपर का पालन कम कॉलम होने तालिका के लिए अशक्त के रूप में अतिरिक्त कॉलम जोड़ें। लेकिन डेटा प्रकार के आदेश में मेल नहीं खाता एक त्रुटि हुई। दूसरे उत्तर से नीचे दिया गया वर्णन आसान होगा।

क्या परिणाम आपकी तालिका में कॉलम के अनुक्रम के समान हैं? क्योंकि ओरेकल कॉलम ऑर्डर में सख्त है। नीचे दिए गए इस उदाहरण एक त्रुटि पैदा करता है:

create table test1_1790 (
col_a varchar2(30), 
col_b number, 
col_c date); 

create table test2_1790 (
col_a varchar2(30), 
col_c date, 
col_b number); 

select * from test1_1790 
union all 
select * from test2_1790; 

ORA-01,790: अभिव्यक्ति इसी अभिव्यक्ति

रूप में एक ही डेटाप्रकार होनी चाहिए जैसा कि आप देख त्रुटि का मूल कारण बेमेल स्तंभ आदेश है कि निहित है में है कॉलम सूची विनिर्देशक के रूप में * के उपयोग से। त्रुटियों के इस प्रकार आसानी से स्पष्ट रूप से स्तंभ सूची में प्रवेश से बचा जा सकता:

चयन col_a, col_b, col_c test1_1790 संघ से सभी चयन col_a, col_b, test2_1790 से col_c; इस त्रुटि के लिए एक अधिक लगातार परिदृश्य है जब आप अनजाने में चयन सूची में स्वैप (या पाली) दो या अधिक स्तंभों है:

select col_a, col_b, col_c from test1_1790 
union all 
select col_a, col_c, col_b from test2_1790; 

या अगर इसके बाद के संस्करण, आपकी समस्या का समाधान नहीं होता है कि कैसे एक उपनाम बनाने के बारे में इस तरह स्तंभों में: (क्वेरी नहीं एक ही तुम्हारा के रूप में है, लेकिन यहां मुद्दा यह कॉलम में उपनाम जोड़ने के लिए कैसे है।)

SELECT id_table_a, 
     desc_table_a, 
     table_b.id_user as iUserID, 
     table_c.field as iField 
UNION 
SELECT id_table_a, 
     desc_table_a, 
     table_c.id_user as iUserID, 
     table_c.field as iField 
0

अगर केवल 1 पंक्ति, आप

Select t1.Col1, t1.Col2, t1.Col3, t2.Col4, t2.Col5 from Table1 t1 join Table2 t2; 
में शामिल होने के लिए उपयोग कर सकते
+0

दो 1-पंक्ति तालिकाओं का एक संघ (प्रत्येक मल्टीसेट कनेक्शन प्रत्येक एक टुपल के साथ) परिणामस्वरूप संबंध में दो पंक्तियां (ट्यूपल्स) होगी। रिलेशनल बीजगणित (जो एसक्यूएल नहीं है) में यूनियन परिणाम _might_ एक पंक्ति हो, हालांकि केवल दो इनपुट संबंधों में एक समान टुपल होता है, उदाहरण के लिए। एक-ट्यूपल संबंध का आत्म-संघ। –

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