sql - 将访问查询转换为 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
解决方案
在您的查询中,主表是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 END
SQL 中的标准。
推荐阅读
- tensorflow - Tensorflow - 如何仅解冻特定层?
- c# - 是否可以在 gpu 级别裁剪屏幕截图
- vb.net - UDP 广播不会触发
- python - 如何删除以前的共享内存文件
- node.js - 在使用 rest api 向 yammer 发送帖子时,如何建议显示应用程序名称
- java - Micronaut 测试文件上传
- angular - 从 Angular 应用程序访问 Google Secret Manager 机密
- java - 一次请求中的 JDBC 选择和更新
- c++ - 如何指定预处理器包含在 Bazel 中?(-包括 common_header.h)
- sql - 如何在 SQL 中计算列中的逻辑表达式