【发布时间】:2016-06-17 14:34:31
【问题描述】:
在下面的 SQL 语句中,我传递 ROUTER_ID 并期望返回最新版本的 RTR_HEADER 记录以及相关的 RTR_SEQUENCE。
SELECT
RH.ROUTER_ID,
RH.DESCRIPTION,
RSEQ.SEQUENCE_NUMBER
FROM
CFG.RTR_SEQUENCE RSEQ
INNER JOIN CFG.RTR_HEADER RH
ON RSEQ.ROUTER_ID = RH.ROUTER_ID
AND RSEQ.ROUTER_REV = RH.ROUTER_REV
WHERE
RH.ROUTER_REV = (SELECT MAX(RVER.ROUTER_REV) FROM CFG.RTR_HEADER RVER WHERE RVER.ROUTER_ID = RH.ROUTER_ID)
AND RH.ROUTER_ID = 'XXXXX-XXX'
ORDER BY RH.ROUTER_ID, RSEQ.SEQUENCE_NUMBER
我不断收到 SQL 命令未正确结束,智能指向 INNER JOIN。如果我省略了 INNER JOIN 及其相关的表和字段,SQL 语句就会运行。我确实得到了 RTR_HEADER 记录的最新版本,但我也需要匹配的 RTR_HEADER。我在这里查看了许多其他关于 SO 的现有答案,考虑了他们的解决方案,但没有任何结果。
【问题讨论】:
-
语法看起来不错。我假设 ROUTER_ID 是字符串而不是数字。
-
正确。一个字符串值。
-
您确定您不在 8i 中或正在检查 8i 的语法。用逗号替换内连接,并将 ON 后的条件移到 where 子句中。
-
您确定 Oracle 9 支持
JOIN运算符吗?我认为 Oracle 10 中添加了对此的支持,但我可能弄错了? -
*哎哟!它的甲骨文 8i。对不起。既然是 8i,那么命令应该如何构造?