【发布时间】:2021-08-17 19:16:44
【问题描述】:
我在 Oracle 8i dB 中有 3 个这样的表
表:NCM_HEADER@ncmsp H
NCR_KEY
--------
4412717
4412718
4412719
表:NCM_DISCREPANCY@ncmsp D
NCR_Key DISCREPANCY_NUMBER STATUS
---------------------------------
4412717 1 'OPEN'
4412717 2 'OPEN'
4412718 1 'CLOSED'
表:NCM_SIGNOFF@ncmsp t
NCR_Key DISCREPANCY_NUMBER GROUP_NAME SEQUENCE_NUMBER
------------------------------------------------------
4412717 1 GROUP3 3
4412717 1 GROUP2 2
4412717 1 GROUP1 1
4412717 2 GROUP4 1
4412718 1 GROUP5 1
我正在寻找以下查询以返回“GROUP3”的值
方法
- 过滤 D.NCR_KEY 和 D.DISCREPANCY_NUMBER
- 子查询还用于过滤这些相同的数字并提取指定 NCR_KEY 的所有 3 个值
- 按 SEQUENCE_NUMBER 降序排列的子查询顺序
- 外层查询只选择前1个
由于某种原因,它无法识别 D 表,并且在子查询中的 D.DISCREPANCY_NUMBER 和 D.NCY_KEY 上失败并显示错误消息:
“D”.“DISCREPANCY_NUMBER”:标识符无效
以下查询是更大查询的一部分。如何返回“GROUP3”?
SELECT
CASE WHEN D.DISCREPANCY_STATUS = 'OPEN'
THEN (SELECT *
FROM (SELECT
t.GROUP_NAME
FROM NCM_SIGNOFF@ncmsp t
WHERE t.NCR_KEY = D.NCR_KEY AND t.DISCREPANCY_NUMBER = D.DISCREPANCY_NUMBER --error point
ORDER BY t.SEQUENCE_NUMBER DESC)
WHERE ROWNUM = 1)
ELSE NULL
END AS "Current Group"
FROM NCM_HEADER@ncmsp H
LEFT JOIN NCM_DISCREPANCY@ncmsp D ON D.NCR_KEY = H.NCR_KEY
WHERE D.NCR_KEY = 4412717 AND D.DISCREPANCY_NUMBER = 1
【问题讨论】:
-
Oracle 8i 已经有 15 年没有得到支持了。您为什么使用不受支持的软件?
-
敏锐地意识到企业 IT 的主要挫折点。除了无休止地向他们抱怨迁移之外,我无能为力。
-
Oracle 8i 不支持 ANSI
left outer join语法。这直到 9i 才可用,所以我希望编译器首先反对。