2017-06-18 66 views
1

一般來說,我試圖學習最好的MySQL實踐,用於在一個表中選擇一組記錄,這些記錄的字段是另一個表中記錄的子集。具體...如何使用MySQL選擇一個子集

的team_competition表存儲團隊註冊了比賽:

團體賽

630 AGLOA2017ELCE

630 AGLOA2017ELEQ

630 AGLOA2017ELPREZ

630 AGLOA2017ELPROP

...

的player_competition表存儲玩家註冊了比賽:

球員比賽

186 AGLOA2017SREQ

186 AGLOA2017SRLING

186 AGLOA2017SROS

186 AGLOA2017SRPREZ

186 AGLOA2017SRPROP

186 AGLOA2017SRWFF

191 AGLOA2017SREQ

191 AGLOA2017SRLING

191 AGLOA2017SROS

191 AGLOA2017SRPREZ

191 AGLOA2017SRPROP

191 AGLOA2017SRWFF

...

要分配球員的球隊,我需要選擇球員誰註冊了相同的比賽作爲球隊的問題。對於這個例子中的球隊630,我需要選擇那些註冊了至少這四個比賽的球員:AGLOA2017ELCE,AGLOA2017ELEQ,AGLOA2017ELPREZ和AGLOA2017ELPROP。

在數學上,我認爲這相當於選擇了球員比賽的超集(包含)的球員比賽。我目前正在使用適度複雜的例程來循環播放和比賽,並將每個比賽與球隊的比賽進行比較。它工作,但似乎非常低效。

我正在學習如何使用MySQL來選擇'子集',但我已經打到了一個心智塊。當發生這種情況時,我通常可以通過寫下我的問題來取得一些進展。只是打字這給了我一些想法,但現在它被寫入...

...預先感謝您分享您可能擁有的任何解決方案。

回答

0

我不確定這是MySQL的最佳做法,但是您可以通過比較一個團隊的競爭計數和玩家參與的團隊數來實現此查詢。

Select Team, Player 
From (
    Select Team, Player, count(0) matching 
    From team_competition t 
     Inner join player_competition p on t.Competition = p.Competition 
    Group by Team, Player 
) tp 
Inner join (
    Select Team, count(0) competitions 
    From team_competitions 
    Group by Team 
) t on tp.Team = t.Team 
Where tp.matching = t.competitions 

(寫到這在手機上,原諒格式化)

+0

非常感謝!這正是我所需要的! –

相關問題