如何仅返回MySQL中包含特定值的组?

时间:2020-11-03 02:24:56

标签: mysql sql

给表mytable加上2列,如

|   foo   |  bar    | 
|   a     |   10    | 
|   b     |   10    |   
|   b     |   15    | 
|   c     |   10    | 
|   c     |   10    | 
|   c     |   10    |  
|   d     |   10    | 
|   d     |   45    |  
|   e     |   20    | 

如何返回仅 包含值foo的{​​{1}}组?

上面的结果数据集应该看起来像

10

请注意,b和d不会返回,因为15和45也是这些组中的值。

3 个答案:

答案 0 :(得分:3)

您可以使用group byhaving

select foo
from mytable
group by foo
having min(bar) = max(bar) and min(bar) = 10;

如果10是最小值:

having max(bar) = 10

答案 1 :(得分:0)

您可以在此处使用存在逻辑:

SELECT DISTINCT foo
FROM yourTable t1
WHERE NOT EXISTS (SELECT 1 FROM yourTable t2 WHERE t2.foo = t1.foo AND t2.bar <> 10);

此查询应受益于以下索引:

CREATE INDEX idx ON yourTable (foo, bar);

答案 2 :(得分:0)

根据您的要求,您需要告知系统

  1. 检索记录,其中bar = 10
  2. 过滤掉包含栏<> 10
  3. 的那些

以下是建议的代码:

select foo, bar from mytable 
where 
bar=10 and foo not in (select foo from mytable where bar <> 10)
group by foo