Есть 2 таблицы:
первая:
UserID - Cat - Group
1200 - 1 - 3
1200 - 4 - 20
1200 - 2 - 7
1235 - 1 - 2
1235 - 4 - 20
1450 - 1 - 3
вторая:
UserID - UserName
1200 - Иван
1235 - Петр
1450 - Дима
Нужно создать запрос, который вернет имя пользователя входящего во все указанные пары Категория-Группа.
На данный момент использую такую конструкцию:
SELECT
COUNT(UserID)
, UserName
FROM usertable ut
INNER JOIN catgrouptable cg ON ut.UserID = cg.UserID
AND (
(cg.cat = 1 AND cg.group IN (3,10,9))
OR (cg.cat = 4 AND cg.group IN (1,2,3,20))
-- неопределенное количество условий вхождения в группы и категории
)
GROUP BY UsetName
HAVING COUNT(UserID)
Каждый OR - выдает мне вхождение в одну из групп по соответствующей категории
Через COUNT я считаю выполнение условия для одной из пар.
HAVING оставляет только те записи что прошли все условия.
Но меня всегда смущает использование конструкции HAVING. Поэтому вопрос, есть ли более изящное решение, которое бы к тому же исключало ошибку когда пользователь имеет более одной группы в категории.