首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择通用交互mysql

选择通用交互mysql
EN

Stack Overflow用户
提问于 2020-05-02 19:10:45
回答 2查看 34关注 0票数 1

我有三张桌子:

代码语言:javascript
复制
[user]
id | name  |  level
10 | John  |   1
11 | Josh  |   2
12 | Mary  |   3
代码语言:javascript
复制
[level_interaction]
level | interact_with
  1   |     1
  1   |     2

  2   |     1
  2   |     2
  2   |     3

  3   |     2
  3   |     3
代码语言:javascript
复制
room_id | user_id
1       |  10
1       |  11

2       |  11
2       |  12

3       | 11  

我想要的是选择哪个级别可以与房间互动。

  • 如果我检查一下room 1,答案应该是1级和2级(因为John是1级,他只能与2级交互),尽管作为级别2的可以与3级交互。
  • 如果我查一下 3房间,因为只有乔什在那里,答案应该是12和3。
  • 如果我选择房间2,答案应该是2级和3级。

基本上,我想要的是一种方式,选择一个共同的互动水平为成员的房间!

检查46rXZdEVEA?language=mysql上的表/数据集

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-02 19:53:01

使用group by li.interact_with子句中的一个条件连接表和HAVING

代码语言:javascript
复制
select li.interact_with
from room r
inner join user u on u.id = r.user_id
inner join level_interaction li on li.level = u.level
where r.room_id = 1
group by li.interact_with
having count(*) = (select count(user_id) from room where room_id = 1);

演示

结果(用于room_id = 1):

代码语言:javascript
复制
> | interact_with |
> | ------------: |
> |             1 |
> |             2 |
票数 0
EN

Stack Overflow用户

发布于 2020-05-02 19:14:10

您没有提到您正在使用的MySQL版本,所以我假设它是现代版本。在MySQL 8.x中,您可以使用CTE。

例如:

代码语言:javascript
复制
with
x as (
  select u.name, i.interact_with as level
  from room r
  join user u on u.id = r.user_id
  join level_interation i on i.level = u.level
  where r.room_id = 1 -- this is the starting room
)
select level
from x 
group by level
having count(distinct name) = (
  select count(distinct name) from x
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61564925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档