示例是 假设:
with CTE1 as (select col1 from t1) select * from CTE1;
with CTE2 as (select col2 from t2 where col2=col1)
select * from CTE2;
这可能吗? 我尝试了很少的代码,但没有用。 请帮助我。
答案 0 :(得分: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;
两个CTE定义用逗号分隔(如in the docs),顺序很重要。在那个相当人为的示例中,您可以从CTE2引用CTE1。但您无法从CTE1引用CTE2,因为就解析器而言,尚未定义它。
即使其中一个已经引用了另一个CTE,主查询也可以引用一个或两个CTE。您可以用相同的方式将两个以上的CTE链接在一起。