避免在Postgres plpgsql函数中几乎重复查询

时间:2019-03-24 16:25:04

标签: sql postgresql sql-update plpgsql

有没有比将查询重复两次的更好的方法来编写此查询?有什么方法可以说valB是否为null,那么它应该与colB中的任何内容匹配,实际上应该从where子句中删除?

if (valB is not null) then
    update mytable set colA = valA where (colB, colC) = (valB, valC);
else
    update mytable set colA = valA where (colC) = (valC);
end if;

2 个答案:

答案 0 :(得分:1)

您可以将OR条件与参数一起使用:

update mytable 
   set colA = valA 
where (valb is null and colC = valC)
   or (valb is not null and (colb, colc) = (valb, valc));

答案 1 :(得分:1)

您可以使用or。我可以这样说:

update mytable 
   set colA = valA 
where colC = valC and
       (valb is null or colb = valb);