将多个不同的更新查询连接到单个查询中 - PostgreSQL

时间:2018-01-15 17:42:00

标签: sql postgresql sql-update

如果之前有过类似的问题,请道歉,目前我运行3个不同的更新查询以获得所需的结果。查询如下,

UPDATE users SET enabled = false where username in (SELECT username
FROM users WHERE enabled = true AND lastaccess != 0 AND lastaccess
< (EXTRACT('epoch' FROM CURRENT_TIMESTAMP) - (86400*200))*1000 AND
username NOT LIKE ('admintest%'));

此查询运行后(禁用所有未在一定时间内访问系统的用户),然后在整个表上运行以下2个查询,

update users set weeklypopupuse = 0;

update users set monthlypopupuse = 0;

这两个查询然后将每周和每月使用重置为0.

现在这根据要求完美地运行,但是有一种更优雅的方式将所有这3个查询写入单个查询,从而得到相同的结果。

任何帮助或建议都将受到高度赞赏。提前致谢

1 个答案:

答案 0 :(得分:1)

<强>更新 在OP给出完整结构后,重构为:

update users 
set 
  weeklypopupuse = 0
, monthlypopupuse = 0
, enabled = case 
  when 
  enabled = true 
      AND lastaccess != 0 
      AND lastaccess < (EXTRACT('epoch' FROM CURRENT_TIMESTAMP) - (86400*200))*1000 
      AND username NOT LIKE ('admintest%') 
   then false 
   end