使用'HAVING'为查询中的每一行设置布尔值为FALSE?

时间:2015-08-31 08:37:45

标签: sql postgresql

(对不起标题的措辞。)

我有以下SQL查询来检索我想要的所有行:

SELECT
    app_activity.name 
FROM
    app_chatmessage
JOIN
    app_activity ON app_chatmessage.activity_id = app_activity.id
GROUP BY
    app_activity.name
HAVING
    COUNT(app_chatmessage.owner_id) = 1;

现在,表格app_chatmessage也有一列seen。对于上述查询返回的所有行,我想将此列设置为FALSE。我该怎么做?

2 个答案:

答案 0 :(得分:3)

试试这个

Update app_chatmessage set seen='FALSE' where
activity_id in 
(
SELECT
    app_activity.id
 FROM
     app_chatmessage
 JOIN
      app_activity ON app_chatmessage.activity_id = app_activity.id
 GROUP BY
     app_activity.name
 HAVING
     COUNT(app_chatmessage.owner_id) = 1
);

答案 1 :(得分:0)

尝试低于一个

WITH CTE AS ( SELECT
    app_activity.name, SEEN,  COUNT(app_chatmessage.owner_id) over(partition by app_activity.name order by app_activity.name) CNT
FROM
    app_chatmessage
JOIN
    app_activity ON app_chatmessage.activity_id = app_activity.id
    )
    UPDATE CTE
    SET SEEN = FALSE
    WHERE CNT =1