2016-08-30 189 views
5

我想从表中获得column1中那些值在column2中的值。如何选择按列分组的值,如果另一列有多个值

例如,我想得到A,因为它有“1,2,3”。 (预期的选择输出:A)

--- 
A|1 
A|2 
A|3 
A|4 
B|1 
B|3 
--- 

这是我已经试过

SELECT * FROM sample_table WHERE Col2 in (1,2,3) GROUP BY col1 

我完全理解它不会工作,因为我只是把条件是第2列必须有(A,1),(A,2),(A,3),(B,1),(B,2) - >将它们组合在一起(A)和(B)

我真的不知道如何强迫它有所有 3值

这里是fiddle尝试它

注意

请随意编辑的文章,以便使其更容易理解,我已经尽了全力,但我知道它不是很好解释,特别是标题

非常感谢您

回答

6

可以使用HAVING()条款:

SELECT col1 
WHERE Col2 in (1,2,3) 
GROUP BY col1 
HAVING COUNT(col2) = 3 

这将只显示有3个值的结果,因为你只1,2,3过滤,如果有3个,它的3

注意:如果COL2的值不是不同的,E.G.有可能为这一数据显示:

A | 1 
A | 1 
A | 2 

然后加入DISTINCT计数的括号内。

+0

DISTINCT是在这种情况下(希望)冗余。否则,我们错过了一个主键:-( – Strawberry

+0

我必须同意,我把它删除:) @Strawberry – sagi

+0

实际上,根据OP的要求,distinct是强制性的,否则所有col1值都有(1, 2,3)将显示为col2 – hchaznedaroglu

0

你可以尝试用HAVINGGROUP_CONCAT玩:

SELECT COL1 
FROM sample 
GROUP BY COL1 
HAVING GROUP_CONCAT(DISTINCT COL2 ORDER BY COL2 ASC) LIKE '%1,2,3%' 
相关问题