在 Oracle 10g 上使用“With”SQL 导致错误

Posted

技术标签:

【中文标题】在 Oracle 10g 上使用“With”SQL 导致错误【英文标题】:Using "With" SQL on Oracle 10g causing errors 【发布时间】:2015-03-26 00:41:09 【问题描述】:

首先告诉你我的代码中的逻辑是什么,在我上一篇文章之后有人向我指出我的程序效率低下,我应该考虑我的方法的逻辑..

简单地说,我想加入一堆表并过滤掉它们以反映某种方案,即波纹管代码中“Z”中的过程

然后使用 z 上的 y 解析该数据...

看网上的例子我不明白为什么这段代码不起作用,我在几个地方读到它可能是一个 oracle 10g 问题,但请注意..任何建议都会很棒

我得到的错误是“ORA-00904:“Z”。“COMMENTS”:无效标识符”

with 
z as 
(
Select * 
 FROM 
 (
    iacd_note c
    inner join iacd_ncr_note e on C.NOTE_ID=E.NOTE_ID
    inner join iacd_ncr f on E.NCR_ID=F.NCR_ID
    inner join iacd_ncr_iac g on F.NCR_ID=G.NCR_ID  
 )
 WHERE c.create_date >= date'2014-01-01'
    AND c.create_date < date'2014-12-31' 
    AND G.SCHEME_ID in (36,37,38,25,26,27,28,29,30,31,32,33,34,35,39,40,44,42,43,45, 48,49,50,51,52,55,56,57,58,68,69,70,71)
),
y as 
(
Select *
From iacd_asset
)

SELECT y.bridge_no, COUNT(*) AS comment_cnt
  FROM y INNER JOIN z
    ON REGEXP_LIKE(z.comments, '(^|\W)BN' || y.bridge_no || '(\W|$)', 'i')
 GROUP BY y.bridge_no
 ORDER BY comment_cnt;

Z.COMMENTS 应该是 z 中发生的合并的一部分

【问题讨论】:

有什么错误? 对不起,我忽略了我的愚蠢,已添加到主帖 应该b.bridge_noy.bridge_no(在分组中) 你的权利,改变了,现在得到一个不同的错误..主帖子更新 【参考方案1】:

这个子查询是无效的 SQL 语法:

Select * 
FROM 
(
   iacd_note c
   inner join iacd_ncr_note e on C.NOTE_ID=E.NOTE_ID
   inner join iacd_ncr f on E.NCR_ID=F.NCR_ID
   inner join iacd_ncr_iac g on F.NCR_ID=G.NCR_ID  
)
WHERE ...

您不能在 FROM 子句周围加上括号。而是:

Select * 
FROM iacd_note c
inner join iacd_ncr_note e on C.NOTE_ID=E.NOTE_ID
inner join iacd_ncr f on E.NCR_ID=F.NCR_ID
inner join iacd_ncr_iac g on F.NCR_ID=G.NCR_ID  
WHERE ...

【讨论】:

嗨删除了括号..仍然得到“ORA-00904:“Z”。“COMMENTS”:无效标识符”..我引用Z输出的方式错误吗?【参考方案2】:

看起来 with 子句的输出可能与原始表的列名不同,所以我选择了所有 z 并注意到我之后的行有一个奇怪的自动名称...

【讨论】:

嗯,这不是真的 - with 子句,就像任何子查询一样,不必重命名原始表中的每一列。

以上是关于在 Oracle 10g 上使用“With”SQL 导致错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Oracle 10g 的 SQL 过程中使用游标的任何替代方法?

使用 PL/SQL 过程在 oracle 10g 中转储表

如何使用 xPath (10g) 在 Oracle SQL extract() 中获取节点名称

如何使用触发器在同一张表中插入新行(Oracle PL/SQL 10G)?

Oracle10g使用$ORACLE_HOME/rdbms/admin/awrrpt.sql报错

高分求解,急!!!Java连接Oracle10g 问题 java.sql.SQLException: 无法从套接字读取更多的数据