
# RecursiveUnion
#### 算子说明
RecursiveUnion算子用于处理递归调用的UNION语句，该类语句通常出现在CTE表达式中。常见的语法逻辑为：有一个初始输入集作为递归过程的初始数据，然后开始进行递归调用得到输出，最后将本次递归调用的输出作为下次递归调用的输入，循环调用得到最终的输出。
#### 典型场景
带RecursiveUnion的SQL语句。
#### 示例
**示例：**带RecursiveUnion的SQL语句。
```
--数据准备。 
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 t1;
```
上述示例中，Recursive Union算子输出信息如下所示。
| 信息名称            | 含义                             |
|:---|:---|
| Recursive Union | 算子的名称。                         |
| Values Scan     | 算子的名称。                         |
| WorkTable Scan  | WorkTable Scan建立临时表存储数据用于下次递归。 |
   
