簡體   English   中英

如何使用MySQL選擇子集

[英]How to select a subset using 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來選擇“子集”,但我遇到了一個心理障礙。 當發生這種情況時,我通常可以通過寫下我的問題來取得一些進展。 只是鍵入這個給了我一些想法,但現在已經寫了......

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

我不確定這是一個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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM