繁体   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