2009-12-17 11 views
49

SQLite के साथ पूर्ण बाहरी जॉइन केवल INNER और बाएं जॉइन है।SQL आउट

क्या SQLite के साथ पूर्ण आउटर जॉइन करने का कोई तरीका है?

उत्तर

80

हां, Wikipedia पर उदाहरण देखें।

SELECT employee.*, department.* 
FROM employee 
     LEFT JOIN department 
      ON employee.DepartmentID = department.DepartmentID 
UNION ALL 
SELECT employee.*, department.* 
FROM department 
     LEFT JOIN employee 
      ON employee.DepartmentID = department.DepartmentID 
WHERE employee.DepartmentID IS NULL 
+0

विकिपीडिया उदाहरण तीन प्रश्नों का 'यूनियन' बना रहा है, जहां आपके उदाहरण में केवल दो हैं। क्या आप अंतर को समझा सकते हैं? –

+2

@ ग्राहमबोरलैंड: मेरे उत्तर में कोड विकिपीडिया से लिया गया था। मुझे लगता है कि जब से मैंने पोस्ट किया है विकिपीडिया संपादित किया गया है। अंतर यह है कि वे गैर-मिलान वाले रिकॉर्ड (प्रत्येक तालिका के लिए एक) प्राप्त करने के लिए एक आंतरिक जुड़ने और दो चयन का उपयोग करते हैं। मेरे उत्तर में पूछताछ आंतरिक जुड़ने और बाएं शामिल होने में चयनों में से एक को जोड़ती है। यह (ए) + (बी) + (सी) की तुलना में (ए + बी) + (सी) है। –

+0

यह अभी भी नवीनतम SQLite (3.7.x) के साथ रास्ता है या मानक आउटर जॉइन का उपयोग किया जा सकता है? – 01es

3

जोनाथन Leffler की टिप्पणी के बाद, यहाँ मार्क बायर्स 'की है कि के लिए एक विकल्प जवाब है:

SELECT * FROM table_name_1 LEFT OUTER JOIN table_name_2 ON id_1 = id_2 
UNION 
SELECT * FROM table_name_2 LEFT OUTER JOIN table_name_1 ON id_1 = id_2 

मूल स्रोत है और आगे SQLite उदाहरण के लिए here देखें।

+3

मुझे लगता है कि कर्मचारी कहां है। डिपार्टमेंट आईडी पूर्ण है, हालांकि आपको डुप्लिकेशंस पंक्ति – Xenione

+1

प्राप्त करने की कोई बात नहीं है, अगर मुझे गलत नहीं लगता है, तो इसका एक ही परिणाम होना चाहिए, यूनियन डुप्लिकेट रिकॉर्ड से मेल खाएगा, लेकिन यह कम कुशल है यूनियन सभी –

+1

यूनियन (_without_ ALL) डुप्लिकेट पंक्तियां हटा देता है – cowbert