如何使用MySQL选择子集
一般来说,我试图学习MySQL在一个表中选择一组记录的最佳实践,这些记录的字段是另一个表中记录的子集。具体地说 team_competition表存储团队注册参加的比赛: 团体赛 630 AGLOA2017ELCE 630 AGLOA2017ELEQ 630 AGLOA2017ELPREZ 630 AGLOA2017ELPROP 玩家_竞赛表存储玩家注册参加的竞赛: 运动员比赛 186 AGLOA2017SREQ 186 AGLOA2017SRING 186 AGLOA2017SRO 186 AGLOA2017SRPREZ 186 AGLOA2017SRPROP 186 AGLOA2017SRWFF 191 AGLOA2017SREQ 191 AGLOA2017SRING 191 AGLOA2017SROS 191 AGLOA2017SRPREZ 191 AGLOA2017SRPROP 191 AGLOA2017SRWFF 要将球员分配给团队,我需要选择与所讨论的团队注册参加相同比赛的球员。对于本例中的团队630,我需要选择至少注册了这四项比赛的球员:AGLOA2017ELCE、AGLOA2017ELEQ、AGLOA2017ELPREZ和AGLOA2017ELPROP. 从数学上讲,我认为这相当于选择球员的比赛,这是球队比赛的超集(包含)。我目前正在使用一个中等复杂的程序来循环浏览球员和比赛,并将每个人与球队的比赛进行比较。这是可行的,但似乎效率极低 我正在研究如何使用MySQL选择“子集”,但我遇到了一个心理障碍。当这种情况发生时,我通常可以通过写下我的问题来取得一些进展。只是输入这个给了我一些想法,但现在它写了如何使用MySQL选择子集,mysql,Mysql, 一般来说,我试图学习MySQL在一个表中选择一组记录的最佳实践,这些记录的字段是另一个表中记录的子集。具体地说 team_competition表存储团队注册参加的比赛: 团体赛 630 AGLOA2017ELCE 630 AGLOA2017ELEQ 630 AGLOA2017ELPREZ 630 AGLOA2017ELPROP 玩家_竞赛表存储玩家注册参加的竞赛: 运动员比赛 186 AGLOA2017SREQ 186 AGLOA2017SRING 186 AGLOA2017SRO
。。。提前感谢您分享您可能拥有的任何解决方案。我不确定这是否是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
(这是在电话上写的,请原谅格式化)我不确定这是否是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
(这是在电话上写的,请原谅)