Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle-Conveting SQL na ANSI SQL

Ta sekcja prawdopodobnie powoduje problem:

  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

Aby to trochę ułatwić, zmieńmy kolejność WHERE klauzula, aby uporządkować tabele według ich związku:

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

Mamy C dołączył do MAST używając C jako tabela "sterowników" i pobieranie danych z MAST gdzie pasuje (złączenie lewe):

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'

Następnie musimy dodać STPO do złączeń:

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

Łącząc to wszystko razem, otrzymujemy:

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

To powiedział , mimo że (+) działa dla złączeń lewych/prawych/zewnętrznych, Oracle nie zaleca nie używając go :




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Stronicowanie za pomocą serwera Oracle i sql oraz ogólna metoda stronicowania

  2. BŁĄD:ORA-00917:brak przecinka podczas używania hibernacji z istniejącą sekwencją w oracle

  3. Konwersja bazy 36 do bazy 10 tylko przy użyciu SQL

  4. Zapytanie wyboru JPA ze znacznikiem czasu i polami daty nie pobiera wyników

  5. Spróbuj przekonwertować czas na sekundy w Oracle SQL