PostgreSQL SELECT,UPDATE和INSERT在一起

时间:2017-12-09 11:00:30

标签: sql postgresql

我目前正在尝试从表中SELECT列,使用所选值进行一些算术运算,然后INSERT将更新后的值重新放回到同一个表中。到目前为止,我正在考虑SELECT所有列,复制到另一个表,UPDATE该表并将其复制回来,但这似乎有点多余。

INSERT INTO tableB (x, y) SELECT x, y FROM tableA;

UPDATE tableB SET y = y + 1;

INSERT INTO tableA (x, y) SELECT x, y FROM tableB;

其中xy被声明为UNIQUE(x, y)

编辑:有没有办法避免为此交易创建另一个表?

2 个答案:

答案 0 :(得分:2)

如果要复制更改的数据,可以使用单个插入执行此操作:

insert into tablea (x,y)
select x, y + 1
from tablea;

答案 1 :(得分:1)

如果我正确地读了你的逻辑,那么你在这里只需要两个插入,可能在一个事务中:

BEGIN;
    INSERT INTO tableB (x, y) SELECT x, y+1 FROM tableA;
    INSERT INTO tableA (x, y) SELECT x, y FROM tableB
COMMIT;

插入后的更新是不必要的,因为您只需插入递增的y值。