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

PostgreSQL查询失效求助:如何找出拥有多个日历的用户及其关联事件记录

解决PostgreSQL多日历用户及其关联事件的查询问题

我来帮你排查这个SQL问题并给出正确的查询语句~

你的查询问题所在

你写的子查询只返回了person_id和计数结果,没有包含calendars表的uuid字段,所以在ON calendars.uuid = events.calendar_id这一步会报错——因为子查询生成的临时表根本没有uuid这个列,自然无法关联。

正确的查询语句

我们需要先筛选出拥有多个日历的用户,再依次关联calendars和events表,拿到对应的所有记录:

SELECT 
    c.uuid AS calendar_uuid,
    c.person_id,
    e.uuid AS event_uuid,
    e.calendar_id,
    e.event_id
FROM events e
INNER JOIN calendars c 
    ON e.calendar_id = c.uuid
INNER JOIN (
    -- 先找出拥有多个日历的用户ID
    SELECT person_id
    FROM calendars
    GROUP BY person_id
    HAVING COUNT(*) > 1
) AS duplicate_users 
    ON c.person_id = duplicate_users.person_id
ORDER BY c.person_id, c.uuid;

语句解释

  1. 子查询duplicate_users:筛选出所有在calendars表中出现次数超过1次的person_id,也就是拥有多个日历的用户。
  2. 第一步关联:把events和calendars表通过calendar_id关联,拿到每个事件对应的日历基本信息。
  3. 第二步关联:通过person_id和子查询结果关联,只保留那些属于多日历用户的日历和事件记录。

用你提供的示例数据,这个查询会返回person_id=4和5的所有日历及其关联的事件,完全符合你的需求。

后续添加唯一约束的步骤

当你清理完这些重复的日历记录后,就可以给calendars表的person_id添加唯一约束,确保每个用户只能拥有一条日历记录:

ALTER TABLE calendars ADD CONSTRAINT unique_calendar_person_id UNIQUE (person_id);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:57:30