postgresql 如何在两个连续的psql语句中使用同一个公用表表达式?

tcomlyy6  于 2023-01-25  发布在  PostgreSQL
关注(0)|答案(1)|浏览(139)

我正在尝试执行一个非常基本的操作,包括几个步骤:
1.来自table1SELECT数据
1.使用所选表中的id列从table2中删除数据
1.将步骤1中选定的表插入table2
我可以想象这会有用

begin;

with temp as (
  select id
  from table1
)

delete from table2
where id in (select id from temp);

insert into table2 (id)
select id from temp;

commit;

但是我收到一个错误,说在插入步骤中没有定义temp。
我找到的唯一一个关于这个的帖子是this one,但它并没有真正回答我的问题。
有什么想法?

vh0rcniy

vh0rcniy1#

来自Postgres文档:
WITH提供了一种编写用于大型查询的辅助语句的方法。这些语句通常称为公用表表达式或CTE,可以将其视为定义仅为一个查询而存在的临时表。
如果多个查询需要临时表,可以改为:

begin;

create temp table temp_table as (
  select id
  from table1
);

delete from table2
where id in (select id from temp_table);

insert into table2 (id)
select id from temp_table;

commit;

相关问题