यदि आपको Oracle डेटाबेस में "ORA-01789:क्वेरी ब्लॉक में गलत संख्या में परिणाम कॉलम" त्रुटि मिल रही है, तो यह शायद इसलिए है क्योंकि आप UNION
जैसे ऑपरेटर का उपयोग करने का प्रयास कर रहे हैं। , INTERSECT
, या EXCEPT
कंपाउंड क्वेरी चलाने के लिए, लेकिन SELECT
ऑपरेटर के दोनों ओर के स्टेटमेंट अलग-अलग संख्या में कॉलम लौटाते हैं।
इसे ठीक करने के लिए, बस सुनिश्चित करें कि दोनों क्वेरीज़ समान संख्या में कॉलम लौटाती हैं।
त्रुटि का उदाहरण
यहां कोड का एक उदाहरण दिया गया है जो त्रुटि उत्पन्न करता है:
SELECT EmployeeName FROM Employees
UNION
SELECT CustomerId, CustomerName FROM Customers;
परिणाम:
ORA-01789: query block has incorrect number of result columns
यहाँ, मैं UNION
. का उपयोग कर रहा हूँ एक यौगिक क्वेरी बनाने के लिए ऑपरेटर। दुर्भाग्य से मुझे एक त्रुटि मिल रही है, क्योंकि मैंने पहली क्वेरी में केवल एक कॉलम शामिल किया है, लेकिन दूसरे में दो कॉलम।
समाधान
इस समस्या को ठीक करने का तरीका यह सुनिश्चित करना है कि दोनों प्रश्न समान संख्या में कॉलम लौटाएं।
तो हम या तो पहले SELECT
. में एक नया कॉलम जोड़ सकते हैं कथन:
SELECT EmployeeId, EmployeeName FROM Employees
UNION
SELECT CustomerId, CustomerName FROM Customers;
परिणाम:
कर्मचारी | कर्मचारी नाम |
---|---|
1 | बार्ट |
1 | मिया |
2 | जनवरी |
2 | रोहित |
3 | अवा |
3 | पीटर |
4 | अवा |
4 | रोहित |
5 | मोनिश |
6 | मोनिश |
7 | मोनिश |
या हम दूसरी क्वेरी से किसी एक कॉलम को हटा सकते हैं:
SELECT EmployeeName FROM Employees
UNION
SELECT CustomerName FROM Customers;
परिणाम:
कर्मचारी नाम |
---|
आवा |
बार्ट |
जनवरी |
मिया |
मोनिश |
पीटर |
रोहित |
ध्यान रखें कि आपके द्वारा उपयोग किए जाने वाले विकल्प के आधार पर आप बहुत भिन्न परिणाम प्राप्त कर सकते हैं। वास्तव में, हमें ऊपर दिए गए उदाहरण में अलग-अलग परिणाम मिले।
ऐसा इसलिए है क्योंकि UNION
जब तक इसे ALL
. के साथ जोड़ा नहीं जाता है तब तक ऑपरेटर अलग-अलग पंक्तियाँ लौटाता है खोजशब्द। जब हमने "आईडी" कॉलम शामिल किए, तो इसने कुछ पंक्तियों को अलग बना दिया, जब वे नहीं होतीं, हम केवल "नाम" कॉलम लौटाते। फिर जब हमने "आईडी" कॉलम को हटा दिया, तो हमें "नाम" कॉलम से अद्वितीय मान मिले।
यदि आप वास्तव में डुप्लिकेट मान वापस करना चाहते हैं, तो आप ALL
. का उपयोग कर सकते हैं कीवर्ड।
इसलिए, हम अपने पिछले उदाहरण को इस प्रकार संशोधित कर सकते हैं:
SELECT EmployeeName FROM Employees
UNION ALL
SELECT CustomerName FROM Customers;
परिणाम:
कर्मचारी नाम |
---|
बार्ट |
जनवरी |
आवा |
रोहित |
मोनिश |
मोनिश |
मोनिश |
मिया |
रोहित |
पीटर |
आवा |
मोनिश |
मोनिश |