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)
这可能吗.我尝试过很少的代码,但没有一个是有用的.请帮我.
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链接在一起.
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |