PostgreSQL中的条件更新

时间:2018-09-26 05:41:37

标签: postgresql

我正在测试一些条件渲染,以查看它在较小的规模上是否表现出预期的效果,然后在较大的表上实现它。

目标是创建一个更新查询,该查询将仅更新用户输入了新数据的列,如果没有数据,则对这些列不执行任何操作

这是我进行测试时的情况。具有空值的行未更新为'newValue'

drop table if exists tester

create table tester (
id serial primary key
val TEXT,
)

insert into tester (val) values (null)

select * from tester

update tester 
set val = case 
when val = null 
then 'newValue' 
else val 
end;

这是我想要产生的简单示例($ 1是用户输入)

drop table if exists tester

create table tester (
id serial primary key
val TEXT,
)

insert into tester (val) values (null)

select * from tester

update tester 
set val = case 
when val != $1
then $1 
else val end
where id = 1

我希望发生的事情是插入以创建ID为1的行和一个等于空值的val单元格。

然后在更新查询中,我认为更新将检查第1行val中存储的数据是否不等于输入值,如果为true,则将第1行的输入值设置为val

这种逻辑和语法正确吗?如果不是,那是不正确的?谢谢!

1 个答案:

答案 0 :(得分:1)

假定用户输入的$1永远不会为NULL:


update tester 
set val = $1
where id = 1
and val <> $1 -- avoid updating with the same value
    ;

注意:您的:

 `case when val != $1 then $1 else val end`

可以简化为:

 `case when val <> $1 then $1 else $1 end`

或:

 `$1`