
# 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  | 将底下筛选出来的结果储存在临时表中。 |
   
