मैंने ओरेकल 11 में पूर्ण आउटर जॉइन का एक अजीब व्यवहार देखा है। मैं मानव संसाधन स्कीमा, विशेष रूप से कर्मचारियों और विभागों से तालिकाओं में शामिल हो रहा था।ओरेकल में पूर्ण बाहरी शामिल होने का अजीब व्यवहार - इसे कैसे समझाया जा सकता है?
उदाहरण के लिए, निम्न क्वेरी 123 पंक्तियों रिटर्न:
SELECT * FROM employees e
FULL JOIN departments d ON e.department_id = d.department_id
हालांकि, समझने के लिए मुश्किल है - जब मैं चयन खंड में विशेष कॉलम का समूह शब्दों में कहें, क्वेरी 122 पंक्तियों वापस आ जाएगी (क लापता पंक्ति एक कर्मचारी जो कोई विभाग सौंपा गया है के लिए है - एक जो अतिरिक्त बाईं के साथ वापस आ गया है भीतरी में शामिल होने की तुलना में शामिल होने):
SELECT first_name, last_name, department_name FROM employees e
FULL JOIN departments d on e.department_id = d.department_id
यहां तक कि जब मैं पंक्तियों गिनती यह रिटर्न 122 (COUNT(*)
) !!! क्या हो रहा है? SELECT *
और SELECT COUNT(*)
के बीच क्या अंतर है?
SELECT * ...
के लिए योजना की व्याख्या:
SELECT STATEMENT 122
VIEW VW_FOJ_0 122
HASH JOIN FULL OUTER 122
Access Predicates
E.DEPARTMENT_ID = D.DEPARTMENT_ID
TABLE ACCESS DEPARTMENTS FULL 27
TABLE ACCESS EMPLOYEES FULL 107
और SELECT COUNT(*) ...
के लिए:
SELECT STATEMENT 1
SORT AGGREGATE 1
VIEW VW_FOJ_0 122
HASH JOIN FULL OUTER 122
Access Predicates
E.DEPARTMENT_ID = D.DEPARTMENT_ID
INDEX DEPT_ID_PK FAST FULL SCAN 27
INDEX EMP_DEPARTMENT_IX FAST FULL SCAN 107
क्या होता है ? 'यूनियन ऑल' का उपयोग करते समय कुछ अलग करें?यदि आप 'first_name, last_name, department_name' द्वारा समूह के साथ गिनती करते हैं तो क्या मिलता है? –
'से चुनें * कर्मचारियों से पूर्ण ई-विभाग विभागों पर e.department_id = d.department_id' 123 पंक्तियां और' से चयन गिनती (*) कर्मचारियों से ई और पूर्ण जॉइन विभागों को e.department_id = d.department_id' पर 122 पंक्तियां देता है? –
हां, बिल्कुल - यही कारण है कि मैंने यह प्रश्न पोस्ट किया है। –