正如我的标题所说,我想在SQL中增加表中所有行的列值。
假设我在tab_a
和PK
中有以下数据:fk_a
和fk_b
以及fk_c
:
|fk_a|fk_b|fk_c|
|1 |2 |2 |
|1 |2 |3 |
如果我执行以下更新声明:
update tab_a
set fk_c = fk_c + 1
我的查询会抱怨说数据(1,2,3)已经存在,但它不应该抱怨,因为我会更新每一行,因此行(1,2,3)应该成为(1,2,3) )。
我如何做到这一点?
答案 0 :(得分:2)
主键应该是可推迟的最终推迟:
create table tab_a(
fk_a int,
fk_b int,
fk_c int,
primary key (fk_a, fk_b, fk_c) deferrable initially deferred
);
insert into tab_a values
(1, 2, 3),
(1, 2, 4);
update tab_a
set fk_c = fk_c + 1
returning *;
fk_a | fk_b | fk_c
------+------+------
1 | 2 | 4
1 | 2 | 5
(2 rows)