【问题标题】:Postgresql update column when passed condition通过条件时Postgresql更新列
【发布时间】:2018-01-29 12:45:34
【问题描述】:

有没有可能,如果有,如何实现以下改变?

给定表格:

param_tab
param_id serial
value integer
anothervalue integer
update_date TIMESTAMP

我想做类似的事情:

UPDATE param_tab pt
CASE WHEN CONDITION THEN pt.value = 14, pt.anothervalue = 20 END
pt.update_date = someTimestamp;

所以update_date 总是会更新,valueanothervalue 仅在某些情况下才会更新

【问题讨论】:

    标签: postgresql case conditional-statements


    【解决方案1】:

    在正确的地方使用CASE 语句:

    UPDATE param_tab pt
    SET value = CASE WHEN condition THEN 14 ELSE pt.value END,
        anothervalue = CASE WHEN condition THEN 20 ELSE pt.anothervalue END,
        update_date = someTimestamp;
    

    【讨论】:

    • 我稍微修改了一下我的问题
    • 追逐移动的目标。
    • 您好,感谢您的回答。还有一个问题。假设条件是 (Select count(*) from ....) > 0 并且在第一种情况下和第二种情况下是相同的查询。我认为如果我在不同的 CASE 语句中使用相同的查询,那么即使它是相同的查询,该语句查询也会被执行两次。例如,可以在 Postgres 函数中将该结果分配给另一个仅执行一次的变量吗?
    • 你展示的太少了。这取决于条件是否取决于正在更新的行。也许您应该重写查询以使用带有FROM 子句的连接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多