Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle-Chuyển đổi SQL sang ANSI SQL

Phần này có thể gây ra sự cố:

  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

Để làm cho việc này dễ dàng hơn một chút, hãy sắp xếp lại WHERE mệnh đề sắp xếp thứ tự các bảng theo cách chúng liên quan:

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

Chúng tôi có C đã tham gia vào MAST sử dụng C làm bảng "trình điều khiển" và lấy dữ liệu từ MAST nơi nó khớp (một kết hợp bên trái):

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'

Sau đó, chúng ta cần thêm STPO đến các tham gia:

LEFT JOIN XX_MAIN.XX_STPO STPO
  ON MAST.STLNR = STPO.STLNR
 AND STPO.IDNRK IS NULL

Tổng hợp tất cả lại với nhau, chúng tôi nhận được:

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

Điều đó nói rằng , mặc dù (+) hoạt động cho các phép nối trái / phải / ngoài, Oracle khuyến nghị không sử dụng nó :




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tên cột bảng Oracle có khoảng trắng

  2. Cách tạo menu trong SQLPlus hoặc PL / SQL

  3. Lỗi Oracle 11.1 khi chuyển đổi số ngày Julian thành DATE hoặc TIMESTAMP

  4. Cách kiểm tra kết nối của cassandra với bộ tích hợp dữ liệu pentaho

  5. Cách rõ ràng nhất để xây dựng một chuỗi SQL trong Java