sql >> Databáze >  >> RDS >> Oracle

Oracle-převedení SQL do ANSI SQL

Problém pravděpodobně způsobuje tato část:

  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

Abychom to trochu usnadnili, přeuspořádáme WHERE klauzule k řazení tabulek podle toho, jak spolu souvisí:

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

Máme C připojen k MAST pomocí C jako tabulku "řidič" a vyzvednutí dat z MAST kde se shoduje (levé spojení):

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'

Pak musíme přidat STPO ke spojením:

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

Když to všechno dáme dohromady, dostaneme:

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 bylo řečeno , i když (+) funguje pro levé/pravé/vnější spojení, Oracle nedoporučuje ne pomocí :




  1. Symfony2:Základní tabulka nebo pohled nenalezen:1146

  2. MySQL server zmizel - přesně za 60 sekund

  3. Zobrazení odkazů v PHP/MySQL?

  4. Je možné znovu sestavit pg_depend?