Reputation: 5136
I am trying to get from a table those values in column1, that have some values in column2.
For example, I want to get A because it has "1,2,3". (Expected Output of select: A)
---
A|1
A|2
A|3
A|4
B|1
B|3
---
This is what I've tried
SELECT * FROM sample_table WHERE Col2 in (1,2,3) GROUP BY col1
I understand perfectly it won't work, since I am just putting the condition that column 2 must have one of those values, and then I group them by Col1, so It will take (A,1),(A,2),(A,3),(B,1),(B,2) -> group them by Col1 and give me (A) and (B)
I really have no clue how I could force it to have ALL the 3 values
Here is the fiddle to try it
NOTE
Please feel free to edit the post in order to make it more understandable, I have tried my best, but I know its not very well explained, specially the title
Thank you very much
Upvotes: 3
Views: 65
Reputation: 443
You could try to play with HAVING
and GROUP_CONCAT
:
SELECT COL1
FROM sample
GROUP BY COL1
HAVING GROUP_CONCAT(DISTINCT COL2 ORDER BY COL2 ASC) LIKE '%1,2,3%'
Upvotes: 0
Reputation: 40481
You can use the HAVING()
clause :
SELECT col1
WHERE Col2 in (1,2,3)
GROUP BY col1
HAVING COUNT(col2) = 3
This will show only results that have 3 values , and since you filtered only for 1,2,3
, if there are 3, it those 3.
Note : If the values on col2 are not distinct , E.G. it's possible for this data to appear:
A | 1
A | 1
A | 2
Then add DISTINCT
inside the parentheses of the count.
Upvotes: 5