【发布时间】:2016-10-13 03:31:51
【问题描述】:
在 SQL 的开头使用 WITH 构造来执行几个子查询,然后这些子查询可用于 Oracle 中查询的主体(后续)部分的多个位置。
您能否在您的示例中加入或匹配 t2 与 t1,即翻译成我的代码,
WITH t1 as (select * from AA where FIRSTNAME like 'Kermit%'),
t2 as (select * from BB B join t1 on t1.ID = B.ID)
我想我很清楚 t1 可以在 WITH 的第二段内引用。
括号内的两个选择是不是非常成熟的查询,可以引用不同的表,在需要的条件下使用任何地方?
我不清楚在这种情况下是否可以使用 JOIN 来匹配来自 AA 和 BB 的记录,或者可能是第二个 WITH 子句中的不同连接方法。我见过的一些示例在两个 WITH 子句“下方”的 select 正文中有一个 WHERE A=B。
我在这些 WITH 声明之后遇到的错误是 t2 中的标识符(字段名称)无法识别,但来自 t1 的其余 SQL 引用就好了。似乎 WITH 语法运行正常,但无法访问第二个 WITH 段 (t2) 的结果。
这是整个非工作查询。
with S as (select * from all_records where RESP_MGR like 'Smith%'),
CHL as (select * from change_log CL JOIN S on S.SERVER_ID = CL.SERVER_ID)
select * from (
select
SERVER_ID as ServerID,
'Current Environment' as Event,
SYSDATE as "Date",
NEW_VALUE as "Data"
from CHL
where OBJECT_DESCR = 'Production'
)
where "Data" is not null
甲骨文说,
ORA-00904: "SERVER_ID": invalid identifier
00904. 00000 - "%s: invalid identifier"
【问题讨论】:
-
您描述“分解子查询”(在 WITH 子句中的内容)应该如何工作的方式是正确的。如果您的查询与您编写的虚构示例完全一样,您将不会收到任何错误。您能否显示实际的查询不起作用 - 也许我们可以帮助指出问题所在。 (这不是你对它应该如何工作的理解——这很好。)
-
你好 mathguy,谢谢。我发布了整个代码和错误消息。错误报告在“当前环境”字样上方有 SERVER_ID 引用的行
标签: sql oracle join common-table-expression