在 Oracle 10g 上使用 "With" SQL 导致错误
Using "With" SQL on Oracle 10g causing errors
首先我会告诉你我的代码中的逻辑是什么,在我最后一次 post 之后有人向我指出我的程序效率低下并且我应该考虑我的方法的逻辑..
简单来说,我想加入一堆表并过滤掉它们以反映某种方案,下面代码"Z"中的过程
然后使用 y on z 解析该数据...
查看在线示例,我看不出为什么这段代码不起作用,我在一些地方读到它可能是 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
中发生的合并的一部分
该子查询无效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 ...
看起来 with 子句的输出可能与原始表的列名不同,所以我选择了所有 z 并注意到我之后的行有一个奇怪的自动名称...
首先我会告诉你我的代码中的逻辑是什么,在我最后一次 post 之后有人向我指出我的程序效率低下并且我应该考虑我的方法的逻辑..
简单来说,我想加入一堆表并过滤掉它们以反映某种方案,下面代码"Z"中的过程
然后使用 y on z 解析该数据...
查看在线示例,我看不出为什么这段代码不起作用,我在一些地方读到它可能是 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
中发生的合并的一部分该子查询无效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 ...
看起来 with 子句的输出可能与原始表的列名不同,所以我选择了所有 z 并注意到我之后的行有一个奇怪的自动名称...