I have a table with 3 columns looking like this :
| id | key | status |
|---|---|---|
| 1 | 1 | a |
| 2 | 2 | a |
| 3 | 3 | a |
| 4 | 1 | b |
| 5 | 2 | b |
| 6 | 4 | b |
I want to extract rows where a key have a "a" AND a "b" as status...
| id | key | status |
|---|---|---|
| 1 | 1 | a |
| 2 | 2 | a |
| 4 | 1 | b |
| 5 | 2 | b |
I KNOW that I need some GROUP BY and HAVING but I twisted my brain for few hours and I don't find any solution...
Thanx !
CodePudding user response:
You can use having count
select `key`
from my_table
where status in ('a','b')
group by `key`
having count(distinct status) =2;
If you need the other values you can use inner join with subquery
select m.*
from my_table m
inner join (select `key`
from my_table
where status in ('a','b')
group by `key`
having count(distinct status) =2
) tbl on m.`key`=tbl.`key`;
