将访问查询转换为oracle(子联接)

时间:2018-10-12 12:29:00

标签: sql oracle join

在这一点上,我正试图将以下访问查询转换为oracle。 我现在遇到的错误是SQL Error: ORA-00907: missing right parenthesis,尽管可能是其他原因造成的? 如果我完全删除IIf行,我仍然会遇到相同的错误。

SELECT Table01.Land
FROM Table01 
RIGHT JOIN (Table02 
RIGHT JOIN ((Table03
LEFT JOIN Table04 ON Table03.ARTNR = Table04.ARTNR)
LEFT JOIN Table05 ON Table03.ARTNR = Table05.ARTNR) ON Table02.Vertreter = Table05.VERTRNR) ON Table01.Land = Table05.LAND

2 个答案:

答案 0 :(得分:1)

将联接放在一起的唯一方法是基于您提供的关系。

FROM Table01 
LEFT JOIN Table05 ON Table01.Land = Table05.LAND
RIGHT JOIN Table02 ON Table02.Vertreter = Table05.VERTRNR
RIGHT JOIN Table03 ON Table03.ARTNR = Table05.ARTNR 
LEFT JOIN Table04 ON Table03.ARTNR = Table04.ARTNR

答案 1 :(得分:1)

在您的查询中,主表为Table03。通过它,您可以对其他表执行一系列外部联接。将联接转换为Oracle的最简单方法是:

SELECT
    Table03.KONZERN, Table05.FIRMNR, Table05.ARTNR, Table05.FORM, 
    Table05.Au, Table05.PRKW, Table05.LFKW, Table05.KNDKBZ, 
    Table05.AUFTRNR, Table05.LIEFNR, Table05.LAND, Table05.GAT, 
    Table05.KOMMI, Table05.TRNR, Table05.KNDNR, Table04.PlaZ, 
    Table03.GF, Table04.GP, Table05.ARTNR2, Table05.von_AF, 
    Table04.EU, Table04.NA,
    -- the following line needs to be changed to: CASE WHEN ELSE END
    IIf(Table01.Land_2, IIf(Table02.Vertreter>="0", Vertreter_Land,Land_2)) AS LAND2,
    Table01.Land, Table02.Vertreter_Land
  FROM Table03 
  LEFT JOIN Table04 ON Table03.ARTNR = Table04.ARTNR
  LEFT JOIN Table05 ON Table03.ARTNR = Table05.ARTNR
  LEFT JOIN Table02 ON Table02.Vertreter = Table05.VERTRNR
  LEFT JOIN Table01 ON Table01.Land = Table05.LAND

注意:我真的不知道IIF()函数是如何工作的。您很有可能可以用SQL中的标准CASE WHEN END替换它。