अजीब ओरेकल बाहरी सिंटैक्स मामले में शामिल होते हैं


16

मैंने एक क्वेरी में निम्नलिखित को देखा है जिसे ओरेकल बाहरी ज्वाइन सिंटैक्स से एसक्यूएल मानक बाहरी सिंट सिंटैक्स में पोर्ट किया जाना चाहिए था:

SELECT ...
FROM A, B, C, D, E
WHERE A.A_ID = B.A_ID
AND B.B_ID = C.A_ID(+)
AND B.B_KEY = C.B_KEY(+)
AND C.C_ID = D.C_ID(+)
AND B.A_ID = E.A_ID(+)
AND B.B_KEY = E.B_KEY(+)
AND 'CONSTANT' = C.X_ID(+)

अब बाहरी ज्वाइन सिंटैक्स का अनुवाद करना आम तौर पर एक यांत्रिक प्रक्रिया है, लेकिन उस अंतिम पंक्ति ने मुझे चकरा दिया था। इसका क्या मतलब है? इसका क्या प्रभाव पड़ता है?

जवाबों:


11

मैंने यांत्रिक प्रक्रिया करने की कोशिश की। मुझे उम्मीद है कि मुझे यह सही याद है।

इससे यह होगा:

SELECT ...
FROM A
         join B on A.A_ID = B.A_ID
    left join C on B.B_ID = C.A_ID and B.B_KEY = C.B_KEY and 'CONSTANT' = C.X_ID
    left join D on C.C_ID = D.C_ID
    left join E on B.A_ID = E.A_ID and B.B_KEY = E.B_KEY

संक्षेप में मुझे लगता है कि लेह रिफ़ेल का उत्तर सही है।

ध्यान दें

पुराने दिनों में याद करने का नियम था: oracle जहाँ Aa = Bb (+) SQL सर्वर में पुराने Aa * = Bb बन जाता है, पुराने सिंटैक्स में प्लस विपरीत दिशा में चला जाता है और तारा बन जाता है, जिसका अर्थ है A = Bb पर B से बाईं ओर जुड़ना


10

लाइन को c.X_ID की आवश्यकता है जो निरंतर मान के बराबर हो या सी तालिका से कोई रिकॉर्ड न हो। बेशक, क्योंकि इसे छोड़ दिया गया है, यह ए तालिका से रिकॉर्ड को सीमित नहीं करेगा, केवल सी तालिका से रिकॉर्ड को सीमित करें जो इसमें शामिल हो जाते हैं। यहाँ एक प्रदर्शन है:

सेट अप:

CREATE TABLE T1 as (select rownum+1 t1_id from dual connect by rownum <= 4);
CREATE TABLE T2 as (
   select rownum t1_id, DECODE(rownum,2,'CONSTANT',3,'NoMatch') CompareField 
   from dual connect by rownum <= 3
);
SELECT * FROM T1;
SELECT * FROM T2;

परिणाम:

SELECT T1.t1_id, T2.t1_id, T2.CompareField
FROM T1, T2
WHERE T1.t1_id = T2.t1_id(+)
AND 'CONSTANT' = T2.CompareField(+)
ORDER BY 1;

या:

SELECT T1.t1_id, T2.t1_id, T2.CompareField
FROM T1 LEFT JOIN T2 ON T1.t1_id = T2.t1_id 
AND 'CONSTANT' = T2.CompareField
ORDER BY 1;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.