mysql – 以高级方式选择WHERE

前端之家收集整理的这篇文章主要介绍了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在对话中
>对话中没有其他用户

原文链接:https://www.f2er.com/mysql/434284.html

猜你在找的MySQL相关文章