You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL查询无'update'事件的唯一ticket_id方法

问题描述

现有数据表结构及数据如下:

id   ticket_id   event
1     130        response
2     130        query
3     130        create
4     130        update
5     131        response
6     131        query
7     131        create
8     132        response
9     132        query
10    132        create

需要在PostgreSQL中查询出event字段从未出现'update'值的唯一ticket_id,预期返回结果为131和132。

解法1:使用NOT EXISTS子查询

这是逻辑最直观的写法,多数场景下性能表现稳定:

SELECT DISTINCT ticket_id
FROM your_table t1
WHERE NOT EXISTS (
    SELECT 1
    FROM your_table t2
    WHERE t2.ticket_id = t1.ticket_id
      AND t2.event = 'update'
);

思路

遍历每条记录对应的ticket_id,检查该ticket_id下是否存在event = 'update'的条目。如果不存在则保留该ticket_id,DISTINCT确保最终结果中每个ticket_id只出现一次。

解法2:使用GROUP BY + HAVING

适合结合聚合统计的场景,写法简洁:

SELECT ticket_id
FROM your_table
GROUP BY ticket_id
HAVING COUNT(CASE WHEN event = 'update' THEN 1 END) = 0;

思路

按ticket_id分组后,统计每组中满足event = 'update'的记录数量。当统计数为0时,说明该ticket_id没有任何'update'事件,符合筛选条件。

解法3:使用EXCEPT集合运算

利用PostgreSQL的集合差集特性实现,语义清晰:

SELECT DISTINCT ticket_id
FROM your_table
EXCEPT
SELECT ticket_id
FROM your_table
WHERE event = 'update';

思路

先获取所有存在的ticket_id集合,再减去包含'update'事件的ticket_id集合,最终得到的差集就是从未出现'update'的ticket_id。

内容的提问来源于stack exchange,提问作者Jerome Asilo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 03:15:47