It's ok when i run
 
```sql
with
   (select count(*) from system.clusters) as v1,
   (select count(*) from system.disks) as v2
select v1 as v
union  all
select v2 as v
```
result:
```
v |
--+
14|
 1|
```
,
but when i  wrap it in subquery:

```sql
SELECT v
FROM
  (with
     (select count(*)  from system.clusters) as v1,
     (select count(*) from system.disks) as v2
   select v1 as v
   union  all
   select v2 as v) as a 
```

it raise error:

`SQL Error [47]: ClickHouse exception, code: 47, host: 127.0.0.1, port: 46535; Code: 47, e.displayText() = DB::Exception: Missing columns: 'v2' while processing query: 'SELECT v2 AS v', required columns: 'v2' (version 21.7.3.14 (official build))`
,
in fact ,  if i drop `union all`, it's still ok:

```sql
SELECT v
FROM
  (with
     (select count(*) from system.clusters) as v1,
     (select count(*) from system.disks) as v2
  select v1 as v
) as a 
LIMIT 1000;
```
result:
```
v |
--+
14|
```
seems that it cannot recognize `union all` under `with` clause in subquery (version: 21.7.3.14).

Another way to avoid error is `with` first, like this:
```sql
with
     (select count(*)  from system.clusters) as v1,
     (select count(*) from system.disks) as v2
SELECT v
FROM(
   select v1 as v
   union  all
   select v2 as v) as a 
```

ASTSelectWithUnionQuery & selects, const std::map<String, ASTPtr> & exprs, const ASTPtr & with_expression_list)
{
    for (auto & select : selects.list_of_selects->children)
    {
        if (ASTSelectWithUnionQuery * node_union = select->as<ASTSelectWithUnionQuery>())
        {
            visit(*node_union, exprs, with_expression_list);
        }
        else if (ASTSelectQuery * node_select = select->as<ASTSelectQuery>())
        {
            visit(*node_select, exprs, with_expression_list);
        }
        else if (ASTSelectIntersectExceptQuery * node_intersect_except = select->as<ASTSelectIntersectExceptQuery>())
        {
            visit(*node_intersect_except, exprs, with_expression_list);
        }
    }
}
void ApplyWithGlobalVisitor::visit(