2008-12-09 16 views
9

मेरे पास चार सारणीएं हैं जो बिल्कुल समान कॉलम हैं, और सभी चारों पर एक दृश्य बनाना चाहते हैं, इसलिए मैं उन्हें एक साथ पूछ सकता हूं।एक ही कॉलम वाले कई टेबलों पर देखें

क्या यह संभव है?

+0

आप किस डेटाबेस सर्वर का उपयोग कर रहे हैं? – ysth

+0

मुझे आपके सटीक सेटअप के बारे में निश्चित नहीं है, लेकिन यदि आपके पास 4 डुप्लिकेट टेबल हैं जो आप एक संघ के साथ पूछना चाहते हैं, तो एक प्रकार की कॉलम वाली एक तालिका अधिक समझ में आ सकती है। बेशक सिस्टम पहले से मौजूद है या अन्य कारक हैं। –

उत्तर

15

का उपयोग करें, आप एक दृश्य उन सभी का मिलन है कि बनाना चाहते हैं टेबल।

कुछ निम्नलिखित की तरह काम करना चाहिए, लेकिन मेरे एसक्यूएल जंग लगी है:

(CREATE VIEW view_name AS 
(SELECT * FROM table1 
UNION 
SELECT * FROM table2 
UNION 
SELECT * FROM table3)); 
+0

यूनियन का उपयोग एकाधिक चयन विवरणों से परिणाम को एक परिणाम परिणाम में गठबंधन करने के लिए किया जाता है। –

2

उपयोग संघ (थकाऊ कारणों के लिए मैं उन्हें गठबंधन करने के लिए जो इस अप्रासंगिक बनाना होगा! नहीं/अनुमति नहीं कर रहा हूँ कर सकते हैं)। Here is explanation

2

यह मानते हुए कि एक ही स्तंभ नाम होने के अलावा में, एक ही के कॉलम में एक ही डेटा शामिल संघ बयान

select * from table1 
union 
select * from table2 
union 
select * from table3 
2

आप कर सकते हैं यदि आप संघ उन्हें (मैं कुछ सूचक सहित सुझाव है कि कौन-कौन तालिका प्रत्येक रिकॉर्ड से आया है):

select table1.column1, 1 as TableNumber 
from  table1 

union 

select table2.column1, 2 as TableNumber 
from  table2 

.. etc .. 
12

यह ध्यान देने योग्य हो सकता है कि आपको अनन्य पंक्तियों को संरक्षित करने के लिए "यूनियन ऑल" का उपयोग करने की आवश्यकता हो सकती है जो तालिकाओं में से एक से अधिक में मौजूद हो सकती है। एक मानक संघ डुप्लीकेट हटा देगा।

+0

धन्यवाद - यह देखने का प्रयास कर रहा था कि कुछ पंक्तियों को क्यों हटाया जा रहा था। यह लाभप्रद है। –

2

यूनियन की बजाय, यूनियन सभी का उपयोग करें, जब तक कि आप विशेष रूप से डुप्लिकेट पंक्तियों को बाहर नहीं करना चाहते। यूनियन को अपने आप को निष्पादित करने में अधिक समय लगता है (जिस तरह से यह डुप्लिकेट ढूंढता है), और डुप्लिकेट पंक्तियों को हटा देता है।

8

आपकी क्वेरी से यह कहना मुश्किल है कि क्या आप यूनियन के आधार पर डेटा को वापस आने की उम्मीद करते हैं, या दृश्यमान रूप से कॉलम वाले दृश्य के रूप में। यह स्पष्ट रूप से एक प्रभाव है।

निम्न नमूना पर विचार करें:

TableA 
ID Name RelatedID 
1 John 2 
2 Paul 1 

TableB 
ID Name RelatedID 
1 Ringo 1 
2 George 1 

TableC 
ID Name RelatedID 
1 Bob 1 

TableD 
ID Name RelatedID 
1 Kate NULL 

अब, यह के खिलाफ निम्न क्वेरी चलाएँ: TableB संघ से सभी चयन

चयन आईडी, से TableA यूनिअन नाम सभी चयन ID, नाम आईडी, टैबसी यूनियन सभी चयन आईडी, तालिका

से परिणाम निम्नलिखित आउटपुट में:

1 John 
2 Paul 
1 Ringo 
2 George 
1 Bob 
1 Kate 

क्या यह आप के बाद क्या है? यदि ऐसा है, तो आप एक यूनियन क्वेरी का उपयोग करते हैं।

अब, अगर प्रभाव आप के बाद कर रहे हैं संबंधित डेटा के एक असतत देखने के लिए है, तो आप कुछ इस तरह करने की जरूरत हो सकता है:

SELECT A.ID MasterID, A.Name MasterName, 
     B.ID BandID, B.Name BandName, 
     C.ID BlackadderID, C.Name BlackadderName 
     D.ID BlackadderRealID, D.Name BlackadderRealName 
FROM 
    TableA A 
INNER JOIN 
    TableB B 
ON 
    A.RelatedID = B.ID 
INNER JOIN 
    TableC C 
ON 
    B.RelatedID = C.ID 
INNER JOIN 
    TableD D 
ON 
    C.RelatedID = D.ID 

इस डेटा का निम्न दृश्य में परिणाम होगा:

MasterID MasterName BandID BandName BlackAdderID BlackAdderName BlackadderRealID BlackadderRealName 
1   John  2  George 1   Bob    1     Kate 
2   Paul  1  Ringo 1   Bob    1     Kate 
संबंधित मुद्दे