यह खंड शायद समस्या पैदा कर रहा है:
FROM BOM_CHILDS C
, XX_MAIN.XX_MAST MAST
, XX_MAIN.XX_STPO STPO
WHERE C.MATNR = MAST.MATNR(+)
AND MAST.STLNR = STPO.STLNR(+)
AND MAST.STLAN(+) = '1'
AND MAST.WERKS(+) = C.WERKS
AND STPO.IDNRK IS NULL
इसे थोड़ा आसान बनाने के लिए, WHERE
. को पुनर्व्यवस्थित करें तालिकाओं को क्रमबद्ध करने के लिए खंड कि वे कैसे संबंधित हैं:
FROM BOM_CHILDS C
, XX_MAIN.XX_MAST MAST
, XX_MAIN.XX_STPO STPO
-- Joining C to MAST
WHERE C.MATNR = MAST.MATNR(+)
AND C.WERKS = MAST.WERKS(+)
AND MAST.STLAN(+) = '1'
-- Joining MAST to STPO
AND MAST.STLNR = STPO.STLNR(+)
AND STPO.IDNRK IS NULL
हमारे पास C
है MAST
से जुड़ें C
. का उपयोग करना "ड्राइवर" तालिका के रूप में और MAST
. से डेटा उठा रहा है जहां यह मेल खाता है (बाएं जोड़):
FROM BOM_CHILDS C
LEFT JOIN XX_MAIN.XX_MAST MAST
ON C.MANTR = MAST.MANTR
AND C.WERKS = MAST.WERKS
AND MAST.STLAN = '1'
फिर हमें STPO
add जोड़ना होगा जुड़ने के लिए:
LEFT JOIN XX_MAIN.XX_STPO STPO
ON MAST.STLNR = STPO.STLNR
AND STPO.IDNRK IS NULL
इन सबको मिलाकर हम पाते हैं:
FROM BOM_CHILDS C
LEFT JOIN XX_MAIN.XX_MAST MAST
ON C.MANTR = MAST.MANTR
AND C.WERKS = MAST.WERKS
AND MAST.STLAN = '1'
LEFT JOIN XX_MAIN.XX_STPO STPO
ON MAST.STLNR = STPO.STLNR
AND STPO.IDNRK IS NULL
उसने कहा , भले ही (+)
बाएं/दाएं/बाहरी जुड़ाव के लिए काम करता है, Oracle अनुशंसा करता है नहीं इसका उपयोग करना
: