Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle-Mengubah SQL ke ANSI SQL

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 :




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memasukkan Data SQL Server dengan Oracle® SQL*Loader

  2. Nomor Oracle ke C# desimal

  3. klausa awal kueri hierarkis oracle dari join

  4. Menemukan indeks terakhir dari sebuah string di Oracle

  5. Tampilan Pengembang PL/SQL tidak menampilkan karakter Ibrani dengan benar