2015-10-16 4 views
0

Предположим, у меня есть следующая таблица пересечения MemberClub:WHERE условие Пересечения таблицы

MemberID | ClubId 
1  | 2 
2  | 1 
2  | 2 
2  | 3 

я хотел бы, чтобы все элементы, которые находятся в клубах с ID 1 и 2. Таким образом, результат должен быть членом с ID 2.

Как будет выглядеть мое заявление? Я пробовал разные варианты, но я не уверен, какой из них выбрать.

Ожидаемый результат должен быть:

MemberID | ClubId 
2  | 1 
2  | 2 

мне нужен гибкий вариант, который работает на гибком количество клубов (это может быть, что я хочу, чтобы все члены находятся в клубе только с ID 1. Или все члены будучи в клубе с ID 2, 4 и 6).

+0

вы спрашиваете, как «WHERE MemberID = 2 и clubID IN (1,2)» – PK20

+0

Нет. Я не знаю MemberID перед выполнением. Я хочу, чтобы все участники были в клубе с ID 1 И 2. – mosquito87

+1

клуб с clubID 1 и 2 или MemberID 1 и 2. Можете ли вы дать ожидаемый результат, чтобы нам было легко помочь – PK20

ответ

1

Общие GROUP BY с HAVING COUNT(DISTINCT) раствором:

select MemberID 
from MemberClub 
WHERE ClubId IN (1,2) 
GROUP BY MemberID 
HAVING COUNT(DISTINCT ClubId) = 2 

Т.е. убедитесь, что есть два разных пользователя: ClubId.

Кроме того, убедитесь, что существуют различные ClubId «s для пользователя (работает только в два клуба случая):

select MemberID 
from MemberClub 
WHERE ClubId IN (1,2) 
GROUP BY MemberID 
HAVING max(ClubId) <> min(ClubId) 

Или пропустить GROUP BY, сделать себя JOIN вместо:

select distinct m1.MemberID 
from MemberClub m1 
    join MemberClub m2 on m1.MemberID = m2.MemberID 
where m1.ClubId = 1 
    and m2.ClubId = 2 

Для возвращения членов, которые во всех клубах:

select MemberID 
from MemberClub 
GROUP BY MemberID 
HAVING COUNT(DISTINCT ClubId) = (select count(distinct ClubId) from MemberClub) 
+0

Есть ли более гибкий способ? Первая версия работает только для двух клубов. Что, когда они должны быть в клубах 1, 3 и 4? Думаю, второй не работает для одного клуба. – mosquito87

+0

Используйте первый запрос в этом случае, гораздо более гибкий и легко настраиваемый. – jarlh

+0

Первый работает только с 2 клубами. Не достаточно гибкий. Мне всегда нужно было узнать количество клубов. – mosquito87

Смежные вопросы