Bagian ini mungkin menyebabkan masalah:
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
Untuk membuatnya sedikit lebih mudah, mari kita atur ulang WHERE klausa untuk mengurutkan tabel berdasarkan hubungannya:
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
Kami memiliki C bergabung ke MAST menggunakan C sebagai tabel "driver" dan mengambil data dari MAST tempat yang cocok (gabung kiri):
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'
Kemudian kita perlu menambahkan STPO untuk bergabung:
LEFT JOIN XX_MAIN.XX_STPO STPO
ON MAST.STLNR = STPO.STLNR
AND STPO.IDNRK IS NULL
Dengan menggabungkan semuanya, kita mendapatkan:
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
Itu dikatakan , meskipun (+) berfungsi untuk gabungan kiri/kanan/luar, Oracle merekomendasikan tidak menggunakannya
: