У меня есть таблица для связи / связи между двумя другими таблицами, таблица клиентов и таблица групп.группа состоит из одного или нескольких клиентов.Таблица ссылок похожа на
APP_ID | GROUP_ID | CUSTOMER_ID
1 | 1 | 123
1 | 1 | 124
1 | 1 | 125
1 | 2 | 123
1 | 2 | 125
2 | 3 | 123
3 | 1 | 123
3 | 1 | 124
3 | 1 | 125
Теперь у меня есть потребность, учитывая список идентификаторов клиентов, чтобы можно было получить идентификатор группы для этого списка идентификаторов клиентов.Идентификатор группы может быть не уникальным, один и тот же идентификатор группы будет содержать один и тот же список идентификаторов клиентов, но эта группа может существовать в нескольких app_id.
Я думаю, что
SELECT APP_ID, GROUP_ID, COUNT(CUSTOMER_ID) AS COUNT
FROM GROUP_CUST_REL
WHERE CUSTOMER_ID IN ( <list of ids> )
GROUP BY APP_ID, GROUP_ID
HAVING COUNT(CUSTOMER_ID) = <number of ids in list>
вернет мне все идентификаторы групп, которые содержат все идентификаторы клиентов в данном списке и только эти идентификаторы групп.Таким образом, для списка (123,125) из приведенного выше примера будет возвращен только идентификатор группы 2
Затем мне нужно будет связаться с таблицей приложения, чтобы использовать созданную временную метку для определения самого последнего приложения, в котором существовала группа.чтобы я мог получить правильную / самую актуальную информацию из таблицы групп.
Есть ли у кого-нибудь мысли о том, является ли это наиболее эффективным способом сделать это?Если есть другой способ быстрее / чище, я буду признателен за ваши мысли.