避免在 postgres plpgsql 函数中几乎重复查询
Posted
技术标签:
【中文标题】避免在 postgres plpgsql 函数中几乎重复查询【英文标题】:Avoid almost duplicating query in postgres plpgsql function 【发布时间】:2019-03-24 16:25:03 【问题描述】:有没有比几乎重复两次查询更好的方法在 plpgsql 函数中编写此查询?有什么办法可以说如果valB
为空,那么它应该匹配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;
【问题讨论】:
【参考方案1】:您可以在参数中使用OR
条件:
update mytable
set colA = valA
where (valb is null and colC = valC)
or (valb is not null and (colb, colc) = (valb, valc));
【讨论】:
【参考方案2】:您可以使用or
。我将其表述为:
update mytable
set colA = valA
where colC = valC and
(valb is null or colb = valb);
【讨论】:
您是否会说您的建议和稍微修改它之间有任何实际区别,将(valb is null or colb = valb)
替换为(colb = case when valb is null then colb else valb end)
或者它们是否相同?另一种方式在性能或其他方面是否有任何缺点(除了阅读时间更长)?
@user779159 。 . .我更喜欢将 case
表达式从 where
子句中删除。以上是关于避免在 postgres plpgsql 函数中几乎重复查询的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Postgres/plpgsql 的视图定义中使用变量
在 postgres plpgsql 函数中重用 json 解析的输入