2015-04-03 79 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 2015-04-10 19:05:44