Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用MySQL选择子集_Mysql - Fatal编程技术网

如何使用MySQL选择子集

如何使用MySQL选择子集,mysql,Mysql,​ 一般来说,我试图学习MySQL在一个表中选择一组记录的最佳实践,这些记录的字段是另一个表中记录的子集。具体地说 ​team_competition表存储团队注册参加的比赛: 团体赛 630 AGLOA2017ELCE 630 AGLOA2017ELEQ 630 AGLOA2017ELPREZ 630 AGLOA2017ELPROP​ 玩家_竞赛表存储玩家注册参加的竞赛: 运动员比赛 186 AGLOA2017SREQ 186 AGLOA2017SRING 186 AGLOA2017SRO

​ 一般来说,我试图学习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的最佳实践,但您可以通过比较一个团队的比赛计数和与玩家加入的团队计数来实现此查询

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
(这是在电话上写的,请原谅)