在单个 SQL-OracleSQL 中可以有多个“ WITHAS”吗

我有一个非常简单的问题: Oracle 是否允许在一个 sql 语句中使用多个“ WITHAS”。

例如:

WITH abc AS( select ......)


WITH XYZ AS(select ....) /*This one uses "abc" multiple times*/


Select ....   /*using XYZ multiple times*/

我可以通过多次重复相同的查询来使查询工作,但不希望这样做,并利用“ WITHAS”。 这似乎是一个简单的要求,但甲骨文不允许我这样做:

ORA-00928: 缺少 SELECT 关键字

265826 次浏览

你可以这样做:

WITH abc AS( select
FROM ...)
, XYZ AS(select
From abc ....) /*This one uses "abc" multiple times*/
Select
From XYZ....   /*using abc, XYZ multiple times*/

正确的语法是-

with t1
as
(select * from tab1
where conditions...
),
t2
as
(select * from tab2
where conditions...
(you can access columns of t1 here as well)
)
select * from t1, t2
where t1.col1=t2.col2;

是的,你可以..。

WITH SET1 AS (SELECT SYSDATE FROM DUAL), -- SET1 initialised
SET2 AS (SELECT * FROM SET1)        -- SET1 accessed
SELECT * FROM SET2;                      -- SET2 projected


10/29/2013 10:43:26 AM

遵循在公共表表达式中初始化它的顺序

Aditya 或者其他人,你可以在你的例子中加入或者匹配 t2和 t1,也就是转换成我的代码,

with t1 as (select * from AA where FIRSTNAME like 'Kermit'),
t2 as (select * from BB B join t1 on t1.FIELD1 = B.FIELD1)

我不清楚是否只支持在 WHERE 进行联接,或者在第二个 WITH 实体中支持什么样的联接方法。其中一些示例的 WHERE A = B 位于“下面”的 select 子句的正文中。

我在执行这些 WITH 声明时遇到的错误是 B 中的标识符(字段名)无法识别,这些标识符位于 SQL 其余部分的正文中。因此 WITH语法似乎运行正常,但不能访问 t2的结果。