2015-04-03 3 views
0

Я пытаюсь получить запрос для следующего примера, где мне нужно выбрать всех людей, которые играли для одной и той же команды (или того же и других) в качестве кого-то. НапримерВыбор кортежей из многозначного атрибута

person teamName 
1  maple leafs 
1  rangers 
2  red wings 
3  rangers 
3  avalanche 
3  maple leafs 

Я пытаюсь создать запрос, который говорит, что «найти все игроки, которые играли на одних и тех же команд, как игрока 1». В приведенном выше примере, он должен вернуть игроков 1 и 3. У меня есть что-то работает, то есть

select person from teams where teamName = 'maple leafs' intersect select person from teams where teamName = 'rangers'; 

Однако это слишком жёстко (игрок может присылают в другую команду). Я могу получить список игроков, которые были в команде игроков 1 со следующими

create table temp as select teamName from teams where person = 1; 
select * from temp join teams on temp.teamName = teams.teamName; 

Но я не знаю, как потом извлечь человек, которые на всей ту же команду, как игрок 1. Я вы пробовали группу и делали предложения, но когда я группируюсь по человеку, все команды больше, чем первые, теряются, поэтому я немного застрял.

Любая помощь приветствуется.

ответ

0

Вы можете обобщать запрос, как это:

select person 
from yourtablename 
where teamname in (select teamname from yourtablename where person = 1) 
group by person 
having count(*) = (select count(*) from yourtablename where person = 1); 

Первый подраздел выберите пределы команды только те, которые человек 1 был на. Но это все еще включает людей, которые были по крайней мере в одной из команд, но не во всех. Тогда предложение HAVING гарантирует, что люди, возвращаемые запросом, имеют точное количество команд как человек 1, а это означает, что они были во всех тех же командах.

+0

Отлично, я закончил использовать счет (*), чтобы сравнить эти две таблицы, спасибо! – errorline1

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