SQL检查列是否包含特定值

时间:2015-11-17 15:13:19

标签: sql

我有一张这样的表:

id     |  Values
------------------
  1    |  a
  1    |  b  
  1    |  c
  1    |  d
  1    |  e
  2    |  a
  2    |  a
  2    |  c
  2    |  c
  2    |  e
  3    |  a
  3    |  c
  3    |  b
  3    |  d

现在我想知道哪个包含至少有一个 a ,一个 b 和一个 c

这是我想要的结果:

   id
--------
  1
  3

2 个答案:

答案 0 :(得分:3)

一种方法是使用having聚合:

select id
from t
where values in ('a', 'b', 'c')
group by id
having count(distinct values) = 3;

如果您希望每个值的计数更灵活:

having sum(case when values = 'a' then 1 else 0 end) >= 1 and
       sum(case when values = 'b' then 1 else 0 end) >= 1 and
       sum(case when values = 'c' then 1 else 0 end) >= 1

答案 1 :(得分:1)

您可以使用分组:

SELECT id
FROM your_table
GROUP BY id
HAVING SUM(CASE WHEN value = 'a' THEN 1 ELSE 0 END) >= 1
   AND SUM(CASE WHEN value = 'b' THEN 1 ELSE 0 END) = 1
   AND SUM(CASE WHEN value = 'c' THEN 1 ELSE 0 END) = 1;

或使用COUNT

SELECT id
FROM your_table
GROUP BY id
HAVING COUNT(CASE WHEN value = 'a' THEN 1 END) >= 1
   AND COUNT(CASE WHEN value = 'b' THEN 1 END) = 1
   AND COUNT(CASE WHEN value = 'c' THEN 1 END) = 1;