【问题标题】:Trying to write a for loop with an if condition to update a postgres table尝试编写带有 if 条件的 for 循环来更新 postgres 表
【发布时间】:2021-09-14 03:57:42
【问题描述】:

我有一个 postgres 数据库表连接到在“运行”之前运行验证检查的应用程序。 由于不正确的默认约束(超过或低于最小最大值),这些验证通常会失败。而不是手动更新这些,我想运行一个查询来查找任何高于或低于最小值/最大值的默认值,并将它们更新为介于两者之间的任意数字(应用程序是自我更正的,所以它不会不管它降落在哪里)。

这是我拥有的,但它没有运行:

do $$
begin
for i in (select id,* from constraints_table)
loop
if i.default_value < i.min_value or i.default_value>i.max_value
then
update constraints_table
set i.default_value = ((i.min_value + i.max_value)/2)
where id=i.id;
end if;
end loop;
end; $$

a) 谁能帮忙解决这个问题

b) 有没有更简单的方法? (python脚本?)

【问题讨论】:

  • 我也试过这个(好得令人难以置信): update constraints_table set default_value = CASE default_value when (default_value > max_value) then (default_value=max_value-1) when (default_value
  • 使用 CTE (WITH) 创建一个列表并照常更新值。 stackoverflow.com/questions/36908495/…

标签: sql postgresql for-loop if-statement


【解决方案1】:

为什么不只是:

update constraints_table
set default_value = (min_value + max_value)/2
where default_value not between min_value and max_value;

【讨论】:

  • 我不知道“不在之间”是一回事。谢谢!我会试试这个。
猜你喜欢
  • 2015-08-24
  • 1970-01-01
  • 2023-03-15
  • 2022-11-26
  • 2012-06-04
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多