在where子句中使用IN

时间:2015-01-28 14:05:40

标签: mysql sql

*假设这个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

您有什么看法?

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 =“绿色”