3

我简化了表格,以便更容易理解。

我有一个包含组的表,并且存在一个包含多个值的组。这是表格:

VALUE | GROUP
  A   |   1
  B   |   1
  A   |   2
  C   |   2
  B   |   3
  A   |   4
  B   |   4
  A   |   5
  B   |   5
  C   |   5

我想为我的查询提供值,我以编程方式构建并找到与这些值匹配的确切组。

例如,如果我为我的查询提供值 A 和 B,我想要作为结果组 1 和 4

A  ---------------> null 
A and B ----------> 1 and 4 
A , B and C ------> 5 
B  ---------------> 3 
A and C ----------> 2 
C ----------------> null
4

1 回答 1

3

您可以使用如下查询(假设值,组对是唯一的):

select `GROUP`
from MyTable
group by `GROUP`
having count(`VALUE`) = count(case when `VALUE` IN ('a','b') then 1 end)
   and count(case when `VALUE` IN ('a','b') then 1 end) = @Count;

('a','b')您要测试的值列表在哪里,并且@Count是检查集中不同值的计数(在本例中为 2)。

演示:http ://www.sqlfiddle.com/#!2/78def/13

于 2012-06-01T13:38:17.933 回答