![](/img/trans.png)
[英]Performing multiple inserts into a primary table and then into secondary tables using Postgres CTE or PLPGSQL
[英]Multiple inserts from multiple WITH/CTE
我有一张这样的桌子:
CREATE TABLE mytable
(
col1 character varying(50),
mydate timestamp without time zone
);
我想向该表中插入数据,但我也想存储源中的最大id:
insert into mytable (select myid, col1, mydate from sourcetable);
我的mytable中没有myid列,以后也不能再问这样的事情: select max(myid) from sourcetable
因为我正在获取快照,并且sourcetable是一个事务表(每秒数百条新记录) ),因此我需要从该快照获取最大ID
我尝试过这样的事情:
with query1 as (select myid, col1, mydate from sourcetable),
query2 as (select max(myid) id from query1)
insert into mytable (select co1, mydate from query1);
update anothertable set value=(select myid from query2) where col2='avalue';
但是我得到这个错误:
ERROR: relation "query2" does not exist
LINE 1: update anothertable set value=(select myid from query2) wher...
有办法解决吗?
问题是您在CTE之后有两个查询。 只有一个。 CTE连接到查询。 因此,只需添加另一个CTE。 像这样:
with query1 as (
select myid, col1, mydate
from sourcetable
),
query2 as (
select max(myid) as id
from query1
),
i as (
insert into mytable -- You should really list the columns here
select co1, mydate
from query1
)
update anothertable
set value = (select myid from query2)
where col2 = 'avalue';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.