【问题标题】:Oracle 8i SQL command not properly endedOracle 8i SQL 命令未正确结束
【发布时间】: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,那么命令应该如何构造?

标签: sql oracle oracle8i


【解决方案1】:
SELECT 
   RH.ROUTER_ID,
   RH.DESCRIPTION,
   RSEQ.SEQUENCE_NUMBER
FROM 
   CFG.RTR_SEQUENCE RSEQ,CFG.RTR_HEADER RH
WHERE RSEQ.ROUTER_ID = RH.ROUTER_ID
  AND RSEQ.ROUTER_REV = RH.ROUTER_REV
  AND 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

【讨论】:

猜你喜欢
  • 2013-01-05
  • 1970-01-01
  • 2014-04-15
  • 2022-01-18
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
相关资源
最近更新 更多