Это идеальный вариант использования предложения union
.
Приведенный ниже запрос возвращает все идентификаторы пользователей, которые имеют более 1 TypeA
плюс все идентификаторы пользователей, которые имеют более 1 TypeB
.
-- all user_ids that have more than one TypeA
select user_id
from yourTable
where typecode = 'TypeA'
group by user_id
having count(*) > 1
union
-- all user_ids that have more than one TypeB
select user_id
from yourTable
where typecode = 'TypeB'
group by user_id
having count(*) > 1
Этот запрос удовлетворяет вашему требованию and/or
, т.е. он выбирает:
- все пользователи с более чем 1 typeA или
- все пользователи с более чем 1 typeB или
- все пользователи с более чем 1 типом А и более
чем 1 типB
Прелесть union
в том, что нет необходимости делать select distinct user_id
, поскольку union
объединяет результирующие наборы в уникальные значения