以高级方式选择WHERE

Mar*_*per 5 mysql sql join

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

表: conversations

+----+
| id |
+----+
| 1  |
| 2  |
| 3  |
| 4  |
| 5  |
+----+
Run Code Online (Sandbox Code Playgroud)

表: 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    |
+----+--------------+------+
Run Code Online (Sandbox Code Playgroud)

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

Users: 1,2,3,4 (Only them, no else)
Run Code Online (Sandbox Code Playgroud)

如果有一个只有那些会话的对话,我想得到那个对话的id,否则result应该成为0

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

Gor*_*off 2

这是“集合内集合”查询的示例。对于这些,我喜欢使用group bywithhaving子句:

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, 2, 3, 4)) = 0
Run Code Online (Sandbox Code Playgroud)

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

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