首页 > 解决方案 > 避免在 postgres plpgsql 函数中几乎重复查询

问题描述

有没有比几乎重复两次查询更好的方法在 plpgsql 函数中编写此查询?有什么办法可以说 ifvalB为 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;

标签: sqlpostgresqlsql-updateplpgsql

解决方案


您可以使用OR带有参数的条件:

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

推荐阅读