mysql - 检查是否存在多个具有相同id的记录
问题描述
我正在尝试检查表pageId IN(?,?,?)
中是否存在多条记录chatParticipants
。
这是我尝试过的 SQL 查询:
SELECT chatId FROM chatParticipants GROUP BY chatId
HAVING SUM(pageId NOT IN('deb47fba9bc6936ed76e831578baa480','123')) = 0
预期行为:
- 如果已经存在与给定 (x) 个参与者的对话,即具有相同的
chatId
值,则它必须返回该chatId
值。
上面的 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
有任何想法吗?
解决方案
这能解决你的问题吗?
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
希望这可以帮助。
推荐阅读
- python - 这是一个异步问题吗?
- typescript - 定义索引类型时,可以限制存在的属性数量吗?
- syntax - 如何解决这种转变/减少冲突?
- python - Django import export 在导出前编辑查询集
- java - 尝试使用具有不一致数据类型的 REST API 作为响应
- css - 有没有办法使用 css 操作 SVG 的“内部笔画”?
- sql - 使用 ts-postgres 将多少行插入 SQL 数据库?
- postgresql - Golang 使用 SSL 证书连接到 Postgres
- ruby-on-rails - Ruby ActiveSupport 1.week VS 7.days
- python - 无论我放多少像素,包含图形的html div都不会增加大小