代码之家  ›  专栏  ›  技术社区  ›  Alec Mather

如何在两个psql事务中使用相同的临时表?

  •  0
  • Alec Mather  · 技术社区  · 2 年前

    我试图通过几个步骤来执行一个非常基本的操作:

    1. SELECT 数据来自 table1
    2. 使用 id 从我选择的表中删除数据的列 table2
    3. 将步骤1中选定的表插入 表2

    我想这会管用的

    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 但它并没有真正回答我的问题。

    思想?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Decly    2 年前

    来自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;