Here’s my DB table named ‘test_tbl’:
id | type |
---|---|
1 | A |
1 | B |
1 | C |
1 | D |
2 | A |
2 | B |
2 | C |
2 | D |
3 | A |
3 | B |
4 | A |
4 | D |
Here every ‘id’ can have at most 4 possible values (A,B,C,D) for ‘type’ column. I want to find out those ids who don’t have all four values in ‘type’ column. So my expected output should be ids (3,4). I have tried as following:
select DISTINCT id from test_tbl where id NOT IN (SELECT id FROM test_tbl where type='A' and type='B' and type='C' and type='D');
But this is giving output all the ids from table.
Advertisement
Answer
Use aggregation:
select id from test_tbl group by id having count(distinct type) <> 4;
If you can have types other than A, B, C, and D, then add:
where type in ('A', 'B', 'C', 'D')