首页 > 解决方案 > 检查是否存在多个具有相同id的记录

问题描述

我正在尝试检查表pageId IN(?,?,?)中是否存在多条记录chatParticipants

这是表结构的示例: 在此处输入图像描述

这是我尝试过的 SQL 查询:

SELECT chatId FROM chatParticipants GROUP BY chatId
HAVING SUM(pageId NOT IN('deb47fba9bc6936ed76e831578baa480','123')) = 0

预期行为:

上面的 SQL 确实有效,有两个输入。但是,下面的查询仍然返回chatId它不应该返回的 。(因为它有不是参与者的'144')

SELECT chatId FROM chatParticipants GROUP BY chatId
HAVING SUM(pageId NOT IN('deb47fba9bc6936ed76e831578baa480','144','123')) = 0 

任何想法为什么这样做?我只想得到一个输出,如果所有参与者都在查询中匹配,并且具有相同的 chatId。

编辑2:

在此处输入图像描述

此 SQL 将返回两个聊天 ID。

SELECT chatId FROM chatParticipants WHERE pageId 
IN ('123','deb47fba9bc6936ed76e831578baa480') GROUP BY chatId HAVING COUNT(*) = 2 

输出:

016030f5ba6d47c31f7f22d92507faf1
43bcd7340f1abf7eda09fcccffdbfe60

事实上,预期的输出应该只返回聊天 id43bcd7340f1abf7eda09fcccffdbfe60

有任何想法吗?

标签: mysqlsqlselectgroup-by

解决方案


这能解决你的问题吗?

SELECT chatId FROM chatParticipants WHERE chatId IN (
  SELECT chatId FROM chatParticipants WHERE pageId
  IN ('123','deb47fba9bc6936ed76e831578baa480') GROUP BY chatId HAVING COUNT(*) = 2
) GROUP BY chatId HAVING COUNT(*) = 2

希望这可以帮助。


推荐阅读