sql - 找到双方都参与的聊天
问题描述
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,所以它不应该返回任何东西。
解决方案
我认为您可能错过了添加 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
推荐阅读
- xml - 使用 Powershell .Net 方法将 XML 转换为 HTML - System.Xml.Xsl.XslLoadException:XSLT 编译错误
- python - 如何在 onnx(onnxruntime) 上进行类似于 sklearn 的多重推理
- r - 如何捕获两个 inputDate() 并计算 shinyapp 中的天数?
- java - @ConfigurationProperties 在 Spring Boot 2.4.2 中的测试中不起作用
- python - 如何在 PyCharm 终端中启用命令历史记录
- c++ - 反转字符串 C++
- python - Python:定义自己的名为“randomcall”的函数
- c++ - C++ 引用不一致
- c - 试图用函数写在结构上
- angular - Leaflet.Draw 中的图层每次都不同