我们可以在单个SQL中使用多个“WITH AS” - Oracle SQL

时间:2013-10-29 09:38:36

标签: sql oracle

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

示例:

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

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

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

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

  

ORA-00928:缺少SELECT关键字

4 个答案:

答案 0 :(得分:138)

您可以这样做:

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

答案 1 :(得分:22)

正确的语法是 -

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;

答案 2 :(得分:9)

是的,你可以......

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

按照在Common Table Expressions

中初始化它的顺序

答案 3 :(得分:3)

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实体支持哪种加入方法。一些示例在WITH子句的选择“下方”的主体中具有WHERE A = B.

我在这些WITH声明之后得到的错误是B中的标识符(字段名称)无法识别,在SQL的其余部分的主体中。所以WITH语法似乎运行正常,但无法访问t2的结果。