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

अतिरिक्त पंक्तियाँ प्राप्त करना - लेफ्ट जॉइन का उपयोग करके 3 टेबल में शामिल होने के बाद

जब आप JOIN एक साथ दो या दो से अधिक तालिकाएं, आपको इन तालिकाओं के लिए एक कार्टेशियन उत्पाद प्रभावी रूप से मिलता है, जिसमें एक फ़िल्टर JOIN में बताया गया है शर्त लागू है।

यह तब अधिक स्पष्ट होता है जब आप एक अप्रचलित निहित JOIN . का उपयोग करते हैं वाक्य रचना।

LEFT JOIN गारंटी देता है कि आपको कोई कम नहीं मिलेगा सबसे बाईं तालिका की तुलना में पंक्तियाँ, i. इ। सबसे बाईं तालिका से प्रत्येक पंक्ति कम से कम एक बार लौटा दी जाती है।

यदि फ़िल्टर एक-से-एक पंक्ति मैपिंग नहीं है, तो भी आप और पंक्तियाँ प्राप्त कर सकते हैं।

आपके मामले में:

SELECT  (b.descr || ' - ' || c.descr) description
FROM    tbl1 a
LEFT JOIN
        tbl2 b
ON      b.ACCOUNT = a.ACCOUNT
LEFT JOIN
        tbl3 c
ON      c.product = a.product
WHERE  a.descr50 = ' '

या तो acccount या product b . में अद्वितीय नहीं हैं या c

इन पंक्तियों के लिए:

a.account

1
2
3

b.account  b.description

1          Account 1
2          Account 2 - old
2          Account 2 - new

, JOIN निम्नलिखित लौटाएगा:

a.account b.account b.description

1         1          Account 1
2         2          Account 2 - old
2         2          Account 2 - new
3         NULL       NULL

, आपको किसी भी तालिका में शामिल पंक्तियों की तुलना में अधिक पंक्तियाँ देता है।

किसी भी तालिका से केवल पहला मिलान करने वाला विवरण चुनने के लिए, इसका उपयोग करें:

SELECT  (
        SELECT  FIRST_VALUE(descr) OVER (ORDER BY descr)
        FROM    tbl2 b
        WHERE   b.account = a.account
                AND rownum = 1
        ) || ' - ' ||
        (
        SELECT  FIRST_VALUE(descr) OVER (ORDER BY descr)
        FROM    tbl3 c
        WHERE   c.product= a.product
                AND rownum = 1
        ) description
FROM    tbl1 a
WHERE   a.descr50 = ' '

अपडेट करने के लिए, बस क्वेरी को इनलाइन व्यू में लपेटें:

UPDATE  (
        SELECT  (
                SELECT  FIRST_VALUE(descr) OVER (ORDER BY descr)
                FROM    tbl2 b
                WHERE   b.account = a.account
                        AND rownum = 1
                ) || ' - ' ||
                (
                SELECT  FIRST_VALUE(descr) OVER (ORDER BY descr)
                FROM    tbl3 c
                WHERE   c.product= a.product
                        AND rownum = 1
                ) description
        FROM    tbl1 a
        WHERE   a.descr50 = ' '
        )
SET     descr50 = description


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं Oracle में किसी तालिका को उपनाम कैसे दे सकता हूं?

  2. संग्रह विधि:Oracle डेटाबेस में LIMIT फ़ंक्शन

  3. Oracle 12c मूल्यों द्वारा पहचाना गया

  4. ओरेकल डेटटाइम कहां क्लॉज में?

  5. डेटाबेस कॉन्फ़िगरेशन सहायक का उपयोग करके Oracle 12c के लिए नमूना स्कीमा स्थापित करना