ChatGPT解决这个技术问题 Extra ChatGPT

我们可以在单个 sql 中有多个“WITH AS”吗?Oracle SQL

我有一个非常简单的问题: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 关键字


D
Deepshikha

你可以这样做:

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

我们可以使用从第一个子查询到第二个子查询的别名吗?在这种情况下 abcxyz 子查询?我需要获取第一个子查询的结果并将其用于第二个子查询。
@Wax我可以毫无问题地在第二个子查询中使用第一个子查询的别名,就像上面的答案所暗示的那样。我还能够在主查询中使用两个表中的别名和列。
完美的答案。
谢谢...我在两个语句之前都重新使用了关键字“with”。你的回答澄清了我的问题。
A
Aditya Kakirde

正确的语法是 -

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;

“您也可以在此处访问 t1 的列”非常有帮助指出。
S
SriniV

是的你可以...

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

按照公用表表达式中的初始化顺序


D
Dave

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 子句“下方”的 select 主体中具有 WHERE A=B。

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


您需要在 t2 with 子句中使用别名 t1
如何在子查询中引用子句表?它抛出一个错误。例如, WITH SET1 AS (SELECT SYSDATE FROM DUAL), -- SET1 初始化 SET2 AS (SELECT * FROM SET1) -- SET1 访问 SELECT * FROM SET2 LEFT OUTER JOIN (select * from SET1 where sysdate = now()) set3 on set1.sysdate = set3.sysdate;