MySQL запрос для функции, подобной Intersect - PullRequest
2 голосов
/ 07 марта 2011

У меня есть таблица Person, таблица Group и таблица Group_Person, где у многих объектов лиц может быть много объектов группы. Group_Person действует как промежуточная таблица и имеет кортеж (group_id, person_id), который сопоставляется с group_id из таблицы Group и person_id из таблицы Person.

Учитывая 0 или более person_id из таблицы Person (которая запрашивается из таблицы Person), я хочу найти все группы из таблицы Group, где в таблице Group_Person есть кортеж (group_id, person_id) для каждого person_id. Другими словами, каждый person_ids отображается на общий group_id.

Поскольку в MySQL нет функции INTERSECT, я подумал сделать следующий запрос (он возвращает только идентификатор_группы):

SELECT t1.group_id 
FROM Group_Person AS t1 
JOIN Group_Person AS t2 ON t1.group_id = t2.group_id 
WHERE t1.person_id = xxx AND t2.person_id = yyy;

Опять же, здесь может быть 0 или более person_ids. Это лучшее решение?

1 Ответ

3 голосов
/ 07 марта 2011

Не думаю, что присоединение к group_person несколько раз сделает это за вас.Вы, вероятно, хотите что-то вроде этого:

SELECT group_id
FROM Group_Person
WHERE person_id in(put the ids here)
GROUP BY group_id
HAVING count(group_id) = the count of person_ids
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...