可以在另一个CTE中调用CTE,CTE2可以使用CTE1结果吗?

0 sql oracle common-table-expression oracle12c

例子假设:

 with CTE1 as (select col1 from t1) select * from CTE1;
    with CTE2 as (select col2 from t2 where col2=col1)
    select * from CTE2;
Run Code Online (Sandbox Code Playgroud)

这可能吗.我尝试过很少的代码,但没有一个是有用的.请帮我.

Ale*_*ole 5

CTE仅存在于定义它的查询中.您的第二个查询不知道第一个查询中的CTE曾经存在过.

你可以引用另一个CTE,只要它们都是同一个查询的一部分(并按正确的顺序定义),所以你可以这样做:

with CTE1 as (select t1.col1 from t1),
     CTE2 as (select t2.col2 from CTE1 join t2 on t2.col2=CTE1.col1)
select * from CTE2;
Run Code Online (Sandbox Code Playgroud)

两个CTE定义用逗号分隔(如文档中所示),顺序很重要.在这个相当人为的例子中,你可以参考CTE2中的CTE1; 但是你不能从CTE1引用CTE2,因为就解析器而言尚未定义CTE2.

主查询可以引用CTE中的任何一个或两个,即使已经引用了另一个.并且您可以以相同的方式将两个以上的CTE链接在一起.