I’m trying to query 4 columns A, B, C and D to find records where there is more than 1 D per A/B.
Relationship is hierarchical from A to D; there can be multiple Ds per C, multiple Cs per B etc.
e.g. here I want to find record 2 from column A because columns A and B are the same but C and D is different
x
A B C D
-------------
1 1 1 1
1 1 2 1
1 1 3 1
2 1 1 1
2 1 2 2
I figured to group on all 4 & use a having
count d > 1 but this oddly returns no results when there should be many.
Is there any way to do this without using a whole bunch of sub-queries, or is that the only way?
NB: data is not numerical the above is just an example. Actual data is string type.
Advertisement
Answer
You can group by a, b and set the condition in the having clause:
select a, b
from tablename
group by a, b
having count(distinct d) > 1
If you want all the rows and columns of the table that meet your conditions:
select t.*
from tablename t
inner join (
select a, b
from tablename
group by a, b
having count(distinct d) > 1
) d on d.a = t.a and d.b = t.b