我目前正在尝试从表中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;
其中x
和y
被声明为UNIQUE(x, y)
编辑:有没有办法避免为此交易创建另一个表?
答案 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
值。