postgresql的多对多查询

postgresql的多对多查询,sql,postgresql,many-to-many,Sql,Postgresql,Many To Many,我在Postgresql数据库中有一个基本的多对多关系 表-用户 身份证 名称 桌上聊天 身份证 名字 表-聊天室用户 身份证 用户ID 查提德 我想获得所有聊天记录(实际上,只有一个这样的聊天记录),其中只有用户,由他们的ID定义 例如,我有id为1的用户、id为2的用户和id为3的用户。我如何才能获得聊天,其中只包含这些用户,而不是更少或更多。这意味着,仅与这些用户中的某个人聊天不会包含在结果中。仅包含这些用户的聊天 我明白,肯定已经有这样的问题了,但我没能找到 这里有一种方法使用分组方法

我在Postgresql数据库中有一个基本的多对多关系

表-用户 身份证 名称

桌上聊天 身份证 名字

表-聊天室用户 身份证 用户ID 查提德

我想获得所有聊天记录(实际上,只有一个这样的聊天记录),其中只有用户,由他们的ID定义

例如,我有id为1的用户、id为2的用户和id为3的用户。我如何才能获得聊天,其中只包含这些用户,而不是更少或更多。这意味着,仅与这些用户中的某个人聊天不会包含在结果中。仅包含这些用户的聊天


我明白,肯定已经有这样的问题了,但我没能找到

这里有一种方法使用
分组方法和
拥有方法:

select cu.chatid
from chatuser cu
group by cu.chatid
having sum(case when cu.userid not in (1, 2, 3) then 1 else 0 end) = 0;
这将统计不在列表中的用户数。
=0
表示
chatId
没有它们

在Postgres中,您可以将其缩短为:

select cu.chatid
from chatuser cu
group by cu.chatid
having sum( (cu.userid not in (1, 2, 3))::int) = 0;

让我们假设查询中只有两个用户,ID分别为1和2,以便更容易检查。然后,在这种情况下,当我有两个chatuser实例,比如{userId:1,chatId:1}和{userId:2,chatId:2}时,它的工作方式就很奇怪了。在这种情况下,我希望查询不返回任何内容,但您的查询同时返回两个聊天。@Andrey。只有一个用户的聊天符合问题中指定的条件。如果你有不同的问题,那就把它当作另一个问题来问。可能是因为我不够准确。试图根据要求更改我的问题。