使用"使用" Oracle 10g上的SQL导致错误

时间:2015-03-26 00:41:09

标签: sql oracle sorting common-table-expression

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

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

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

在线查看示例我不明白为什么这个代码dosnt工作,我在一些地方读过它可能是一个oracle 10g问题但请注意......任何建议都会很棒

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

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

中发生的合并的一部分

2 个答案:

答案 0 :(得分:0)

此子查询是无效的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 ...

答案 1 :(得分:0)

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