如何通过两个用户ID查询对应的对话ID(基于关联表)
根据两个用户ID获取对话ID的SQL实现
你可以通过以下两种常见方法实现需求:
方法一:分组统计法
利用GROUP BY和HAVING子句筛选出同时包含两个用户的对话ID:
SELECT ud.dialog_id FROM users_dialogs ud WHERE ud.user_id IN (2, 7) GROUP BY ud.dialog_id HAVING COUNT(DISTINCT ud.user_id) = 2;
原理说明:
- 先筛选出用户ID为2和7的所有对话关联记录
- 按对话ID分组后,统计每组内的不同用户数量
- 只保留用户数量等于2的分组,即两个用户都参与的对话
如果需要从dialogs表返回对话ID(结果一致,适合后续扩展字段):
SELECT d.id FROM dialogs d JOIN users_dialogs ud ON d.id = ud.dialog_id WHERE ud.user_id IN (2, 7) GROUP BY d.id HAVING COUNT(DISTINCT ud.user_id) = 2;
方法二:多表连接法
通过两次关联users_dialogs表,直接匹配同时存在两个用户的对话:
SELECT d.id FROM dialogs d JOIN users_dialogs ud1 ON d.id = ud1.dialog_id AND ud1.user_id = 2 JOIN users_dialogs ud2 ON d.id = ud2.dialog_id AND ud2.user_id = 7;
原理说明:
- 第一次连接筛选出用户2参与的对话
- 第二次连接在这些对话中筛选出同时有用户7参与的记录
- 最终返回的就是两个用户共同参与的对话ID
内容的提问来源于stack exchange,提问作者DisplayName
相关产品推荐
相关产品推荐

