*假设这个mySql表:
id | group | members
1 | blue | Bob
2 | red | Tom
3 |green | Maria
4 |blue | Maria
5 |red | Bob
6 |red | Maria
7 |yellow | Bob
如何查询此表以获取成员都在“蓝色”和“绿色”
组中的行在where子句中使用“IN”对我不起作用。
预期结果:“Maria”
也许我找到了一些东西......如果我在“IN”数组中使用n变量,那么我应该在“HAVING”部分中使用相同的n值。 尝试这个声明,它似乎工作。 (评论赞赏)
SELECT id,members FROM my_table WHERE `team` IN('blue', 'red', 'green') GROUP BY members HAVING COUNT( DISTINCT team) >= 3
您有什么看法?
答案 0 :(得分:1)
由成员分组,只使用绿色和蓝色两者。
select members
from your_table
where `group` in ('blue','green')
group by members
having count(distinct `group`) = 2
查询将过滤仅包含蓝色和绿色的记录。然后它只需要有两个不同组的膜 - 蓝色和绿色。
答案 1 :(得分:0)
select *
from members mb
inner join members mg on mg.members = mb.members and mg.`group` = 'green'
where mb.`group` = 'blue'
http://sqlfiddle.com/#!2/05d8b2/8/0
它是两组之间的交叉点(内连接)。
答案 2 :(得分:0)
从my_table A内连接my_table B中选择ID ON A.成员= B.成员 其中A.group =“蓝色” AND B.group =“绿色”