Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle- बाएँ बाहरी कई तालिकाओं में शामिल हों जो वांछित शून्य मान वापस नहीं कर रहे हैं

आपको एक बेहतर समझ हासिल करने की आवश्यकता है कि LEFT JOIN कैसे काम करता है (बाहरी जोड़ सामान्य रूप से - बाएँ/दाएँ और पूर्ण [बाहरी] जुड़ते हैं)

बायाँ जॉइन हमेशा दो चरणों में किया जाता है:

SELECT ....
FROM table1
LEFT JOIN table1 ON join_conditions
WHERE where_conditions

चरण 1 - LEFT JOIN पहले किया जाता है (दो तालिकाओं में शामिल होने के लिए ON क्लॉज में निर्दिष्ट शर्तों का उपयोग करके)
चरण 2 - चरण 1 में शामिल होने से उत्पन्न परिणाम पर WHERE की शर्तें लागू होती हैं

लेफ्ट जॉइन कैसे काम करता है - एक त्वरित रिमाइंडर:लेफ्ट जॉइन हमेशा लेफ्ट टेबल से सभी पंक्तियों को लौटाता है, यहां तक ​​कि इन पंक्तियों के लिए जिनका दायां टेबल में कोई मेल नहीं है। जब कोई मिलान नहीं होता है (ऑन कंडीशन का मूल्यांकन गलत होता है), लेफ्ट जॉइन राइट टेबल के लिए NULLs लौटाता है। लेफ्ट जॉइन के रूप में।

इसलिए यदि आपके पास यह प्रश्न है:

SELECT S.GROUP,S.TABLE_ID,H.RUN_DATE,H.STATUS 
FROM source_table S 
LEFT JOIN HISTORY H
ON S.TABLE_ID=H.TABLE_ID
WHERE H.STATUS='COMPLETED'

डेटाबेस पहले लेफ्ट जॉइन करता है, जो है:

SELECT S.GROUP,S.TABLE_ID,H.RUN_DATE,H.STATUS 
FROM source_table S 
LEFT JOIN HISTORY H
ON S.TABLE_ID=H.TABLE_ID

उपरोक्त क्वेरी निम्नलिखित परिणाम देती है (निष्क्रिय पक्ष पर अंतिम 3 पंक्तियों में NULLs देखें):

|   S.GROUP | S.TABLE_ID |                 H.RUN_DATE |  H.STATUS |
|-----------|------------|----------------------------|-----------|
|     Sales |       1210 |  January, 05 2016 00:00:00 | COMPLETED |
|     Sales |       1210 | February, 05 2016 00:00:00 | COMPLETED |
| Reference |       1211 | February, 05 2016 00:00:00 | COMPLETED |
| Reference |       1211 |    March, 05 2016 00:00:00 | COMPLETED |
| Marketing |       1230 |  January, 05 2016 00:00:00 | COMPLETED |
| Marketing |       1230 |    March, 05 2016 00:00:00 | COMPLETED |
|     Sales |       1245 |                     (null) |    (null) |
| Reference |       1650 |                     (null) |    (null) |
|     Sales |       1784 |                     (null) |    (null) |

और फिर डेटाबेस उपरोक्त परिणाम सेट पर WHERE शर्त निष्पादित करता है:

WHERE H.STATUS='COMPLETED'

चूंकि NULL='COMPLETED' FALSE का मूल्यांकन करता है, तो क्वेरी का अंतिम परिणाम होता है:

|     GROUP | TABLE_ID |                   RUN_DATE |    STATUS |
|-----------|----------|----------------------------|-----------|
|     Sales |     1210 |  January, 05 2016 00:00:00 | COMPLETED |
|     Sales |     1210 | February, 05 2016 00:00:00 | COMPLETED |
| Reference |     1211 | February, 05 2016 00:00:00 | COMPLETED |
| Reference |     1211 |    March, 05 2016 00:00:00 | COMPLETED |
| Marketing |     1230 |  January, 05 2016 00:00:00 | COMPLETED |
| Marketing |     1230 |    March, 05 2016 00:00:00 | COMPLETED |

वह है:सभी NULLs छोड़ दिए गए थे।
यह डेमो देखें:http://sqlfiddle .com/#!9/e2ed0/3

यदि आप NULL मानों के साथ भी रिकॉर्ड प्राप्त करना चाहते हैं, तो आपको इस स्थिति को इसमें बदलना होगा:

WHERE ( H.STATUS='COMPLETED' OR H.STATUS IS NULL )

आप WHERE क्लॉज से ths कंडीशन को भी हटा सकते हैं, और इसे LEFT JOIN की ON कंडीशन में जोड़ सकते हैं, यानी:

SELECT S.GROUP,S.TABLE_ID,H.RUN_DATE,H.STATUS 
FROM source_table S 
LEFT JOIN HISTORY H
ON ( S.TABLE_ID=H.TABLE_ID AND H.STATUS='COMPLETED' )

इस डेमो में अंतिम क्वेरी देखें:http://sqlfiddle.com/#!9/e2ed0 /3




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ओरेकल एसक्यूएल लिस्टैग फ़ंक्शन

  2. एक ही तालिका में एकाधिक पंक्तियों को कैसे सम्मिलित करें-ओरेकल 10g

  3. Oracle SQL डेवलपर से Excel में डेटा कैसे निर्यात करें?

  4. सूची में कॉमा से अलग की गई स्ट्रिंग

  5. Oracle क्वेरी में सशर्त रूप से कॉलम का चयन कैसे करें