【问题标题】:Using IN in where clause在 where 子句中使用 IN
【发布时间】:2015-01-28 14:05:39
【问题描述】:

*假设这个 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”对我不起作用。

预期结果:“玛丽亚”

编辑:

也许我找到了一些东西...如果我在“IN”数组中使用 n 变量,那么我应该在“HAVING”部分使用相同的 n 值。 尝试使用此语句,它似乎有效。 (cmets赞赏)

 SELECT id,members
    FROM my_table
    WHERE `team` IN('blue', 'red', 'green')
    GROUP BY 成员
    有 COUNT(不同的团队)>= 3

你有什么意见?

【问题讨论】:

  • 显示你尝试过的查询
  • 你试过什么查询?
  • @Jean-FrançoisSavard, @juergen_d, @TZHX 这是我的 sql 语句:SELECT id, member FROM my_table as f WHERE group IN('blue','green') GROUP BY members HAVING COUNT( DISTINCT group) >= 2 如果“IN”子句中只有 2 个变量,则您的语句是可以的。但是如果我在其中添加第三个变量,我不会得到我所期望的。我的意思是,我希望得到 0 行。

标签: mysql sql


【解决方案1】:

按成员分组,只选择同时具有绿色和蓝色的成员。

select members
from your_table
where `group` in ('blue','green')
group by members
having count(distinct `group`) = 2

查询将过滤只有蓝色和绿色的记录。然后它只需要具有 2 个不同组的成员 - 蓝色和绿色。

【讨论】:

  • 然后把= 2改成>= 2
  • @Jean-FrançoisSavard:你读过这个问题吗? 如何查询此表以获取成员同时在组“蓝色”和“绿色”中的行
  • @Jean-FrançoisSavard:having 部分是必不可少的,不需要更改。
  • @Jean-FrançoisSavard:想想where 子句,如果你愿意,可以测试一下
  • @Jean-FrançoisSavard:没问题。
【解决方案2】:
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

这是两个组之间的交集(内部连接)。

【讨论】:

    【解决方案3】:

    从 my_table A 中选择 id 内部连接 ​​my_table B ON A.members = B.members 其中 A.group ='blue' AND B.group ='green'

    【讨论】:

    • 您的答案与 5 年前 andrei.mihail.nicolae 给出的答案重复。如果您认为您可以做出更好的回答,请在您的帖子中添加额外的解释。
    猜你喜欢
    • 1970-01-01
    • 2012-06-16
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多