加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql – 以高级方式选择WHERE

发布时间:2020-12-11 23:54:18 所属栏目:MySql教程 来源:网络整理
导读:我正在尝试检查数据库是否存在特定组合. 表:对话 +----+| id |+----+| 1 || 2 || 3 || 4 || 5 |+----+ 表:conversations_users +----+--------------+------+| id | conversation | user |+----+--------------+------+| 1 | 1 | 1 || 2 | 1 | 2 || 3 | 2

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

表:对话

+----+
| 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在对话中
>对话中没有其他用户

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读