首页 > 解决方案 > 找到双方都参与的聊天

问题描述

chat_person
---
id chat_id person_id
1   1      20
2   1      19
3   2      19
4   2      3
5   3      19
6   3      2

我试图找到 p1=20 和 p2=2 都在其中的 chat_id。如果没有,则不返回。

SELECT DISTINCT "t1".chat_id
FROM "chat_person" t1
WHERE 
    EXISTS (
        SELECT 1 FROM "chat_person" t2
        WHERE "t2".person_id = 20
    )
    AND "t1".person_id = 2

此查询错误地返回chat_id: 3。person_id=20 和 person_id=2 没有共同的 chat_id,所以它不应该返回任何东西。

标签: sqlpostgresql

解决方案


我认为您可能错过了添加 where 条件存在的地方。

 SELECT DISTINCT "t1".chat_id
FROM "chat_person" t1
WHERE 
    EXISTS (
        SELECT 1 FROM "chat_person" t2
        WHERE "t2".person_id = 20 and t2.ChatID = "t1".chat_id  
    )
    AND "t1".person_id = 2

推荐阅读