【发布时间】:2016-11-12 12:44:43
【问题描述】:
create table test (
id serial primary key,
c1 int,
c2 int
);
insert into test (c1,c2) values (1,1);
-- here (id, c1, c2) = (1, 1, 1)
update test set c1=2, c2=c1+2;
SELECT * FROM test ;
MySQL 给出 (1,2,4),Postgres 给出 (1,2,3)。
我希望 PostgreSQL 表现得像 MySQL,使用更新的值而不是原始值。是否可以?否则,如果我在列上有索引并进行两次更新而不是一次更新,那么我有不必要的 UPDATE = DELETE + INSERT(对于 PostgreSQL),并且工作量加倍。在特定情况下,我实际上必须进行 4 次更新而不是 1 次 :(。在 SQL 之外进行添加很容易,但我有 SQL 相关的函数。
注意据我记得, UPDATE = DELETE + INSERT 可能不是数字类型的情况,或者如果它们有索引?对于 varchars,它总是正确的。
【问题讨论】:
-
既然你给 c1 赋值了,为什么不
c1 = 2, c2=2+2呢? -
因为就像我写的那样,这只是一个例子,实际上我在这个地方使用了SQL函数而不是加法。我可以这样做:c1=f(c1), c2 = f2(f(c1)), 写多余的东西.. 但想知道是否有更好的解决方案。
-
好问题。找不到关于 UPDATE 的 SQL 标准行为(谷歌搜索
SQL standard update source)
标签: mysql sql postgresql multiple-columns