mysql – 以高级方式选择WHERE

我正在尝试检查数据库是否存在特定组合.

表:对话

+----+
| id |
+----+
| 1  |
| 2  |
| 3  |
| 4  |
| 5  |
+----+

表:conversations_users

+----+--------------+------+
| id | conversation | user |
+----+--------------+------+
| 1  | 1            | 1    |
| 2  | 1            | 2    |
| 3  | 2            | 1    |
| 4  | 2            | 2    |
| 5  | 2            | 3    |
| 6  | 2            | 4    |
| 7  | 3            | 2    |
| 8  | 3            | 3    |
| 9  | 4            | 2    |
| 10 | 4            | 4    |
+----+--------------+------+

然后我想进行查询以获得这些用户在同一对话中的对话:

Users: 1,2,3,4 (Only them,no else)

如果存在只有那些会话的对话,我想获得该对话的id,否则结果应该变为0

任何人都有任何想法如何做到这一点?

最佳答案
这是“set-within-sets”查询的示例.对于这些,我喜欢使用group by with having子句:

select conversation
from conversation_users cu
group by conversation
having SUM(user = 1) > 0 and
       sum(user = 2) > 0 and
       sum(user = 3) > 0 and
       sum(user = 4) > 0 and
       sum(user not in (1,4)) = 0

having子句的每个条件对应于问题中指定的五个条件之一:

>用户1在对话中
>用户2在对话中
>用户3在对话中
>用户4在对话中
>对话中没有其他用户

相关文章

在正式开始之前,我们先来看下 MySQL 服务器的配置和版本号信...
> [合辑地址:MySQL全面瓦解](https://www.cnblogs.c...
物理服务机的CPU、内存、存储设备、连接数等资源有限,某个时...
1 回顾 上一节我们详细讲解了如何对数据库进行分区操作,包括...
navicat查看某个表的所有字段的详细信息 navicat设计表只能一...
文章浏览阅读4.3k次。转载请把头部出处链接和尾部二维码一起...