首页 > 解决方案 > 将访问查询转换为 oracle(子连接)

问题描述

我被困在这一点上,试图将以下访问查询转换为 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

标签: sqloraclejoin

解决方案


在您的查询中,主表是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()功能是如何工作的。您很可能可以将其替换为CASE WHEN ENDSQL 中的标准。


推荐阅读