如何在 postgres 中对相同的 CTE 表达式执行 UNION ALL?
Posted
技术标签:
【中文标题】如何在 postgres 中对相同的 CTE 表达式执行 UNION ALL?【英文标题】:How to perform UNION ALL on same CTE expression in postgres? 【发布时间】:2021-04-16 09:17:09 【问题描述】:我最初创建了 CTE,然后使用联合操作选择查询,因为我想要重复的行。
with a as (select emp_name,empdept from emp)
select * from a
union all
with a as (select emp_name,empdept from emp)
select * from a
我在“WITH”处或附近收到错误**语法错误**
【问题讨论】:
【参考方案1】:不确定您要达到的目标,但以下应该可行
让我们创建表并插入一些行
create table emp (emp_name varchar,empdept int);
insert into emp values ('Pippo',1000);
insert into emp values ('Pluto',3000);
insert into emp values ('Franco',4000);
现在查询
with a as (select emp_name,empdept from emp),
b as (select emp_name,empdept from emp)
select * from a
union all
select * from b;
结果
emp_name | empdept
----------+---------
Pippo | 1000
Pluto | 3000
Franco | 4000
Pippo | 1000
Pluto | 3000
Franco | 4000
(6 rows)
【讨论】:
【参考方案2】:这是需要用括号将 UNION 的每个查询括起来的罕见情况之一:
(
with a as (select emp_name,empdept from emp)
select * from a
)
union all
(
with a as (select emp_name,empdept from emp)
select * from a
)
但为什么要重复 CTE?
with a as (
select emp_name,empdept from emp
)
select * from a
union all
select * from a
Online example
如果你在两个 CTE 中有两个不同的查询,你仍然可以这样做:
with a as (
select emp_name,empdept from emp1
), b as (
select emp_name,empdept from emp2
)
select * from a
union all
select * from b
Online example
【讨论】:
如果我不重复 CTE,它会给我一个错误 @anukritikulshrestha works for me以上是关于如何在 postgres 中对相同的 CTE 表达式执行 UNION ALL?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Data JPA 中使用 CTE 表达式 WITH 子句
Postgres - 使用 CTE 的 id 列的唯一值,与 GROUP BY 一起加入