更新时间:2025-05-29 GMT+08:00
RecursiveUnion
算子说明
RecursiveUnion算子用于处理递归调用的UNION语句,该类语句通常出现在CTE表达式中。常见的语法逻辑为:有一个初始输入集作为递归过程的初始数据,然后开始进行递归调用得到输出,最后将本次递归调用的输出作为下次递归调用的输入,循环调用得到最终的输出。
典型场景
带RecursiveUnion的SQL语句。
示例
示例:带RecursiveUnion的SQL语句。
--数据准备。 gaussdb=# DROP TABLE IF EXISTS t1; gaussdb=# CREATE TABLE t1(c1 number, c2 number, c3 number); CREATE TABLE gaussdb=# INSERT INTO t1 VALUES(generate_series(1, 100), 2, 3); INSERT 0 100 --执行结果。 gaussdb=# EXPLAIN WITH RECURSIVE t1(n) AS ( VALUES(1) UNION ALL SELECT n+1 FROM t1 WHERE n < 100) SELECT sum(n) FROM t1; QUERY PLAN --------------------------------------------------------------------------- Aggregate (cost=3.65..3.66 rows=1 width=12) CTE t1 -> Recursive Union (cost=0.00..2.96 rows=31 width=4) -> Values Scan on "*VALUES*" (cost=0.00..0.01 rows=1 width=4) -> WorkTable Scan on t1 (cost=0.00..0.23 rows=3 width=4) Filter: (n < 100) -> CTE Scan on t1 (cost=0.00..0.62 rows=31 width=4) (7 rows) --删除。 gaussdb=# DROP TABLE IF EXISTS t1;
上述示例中,RecursiveUnion算子输出信息如下所示。
信息名称 |
含义 |
---|---|
Recursive Union |
算子的名称。 |
Values Scan |
算子的名称,对值进行扫描。 |
WorkTable Scan |
将底下筛选出来的结果储存在临时表中。 |
父主题: 运算符