我有一个MySQL数据库模式,如下所示:
team teams_players players
+--+ +--+-------+---------+ +--+
|id| |id|team_id|player_id| |id|
+--+ +--+-------+---------+ +--+
|1 | |1 | 1| a| |a |
|2 | |2 | 1| b| |b |
+--+ |3 | 1| c| |c |
|4 | 1| d| |d |
|5 | 1| e| |e |
|6 | 2| a| |f |
|7 | 2| d| |g |
|8 | 2| e| +--+
|9 | 2| f|
|10| 2| g|
+--+----------+------+
球队可以有很多球员,一个球员可以在很多球队中。
我需要能够检查数据库中是否已经存在一组特定的球员作为一个团队。如果它不存在,我想做一些INSERT来创建它。如果它确实存在,我只需要获取它的team_id。
例如,根据上面的数据,如果我有一组球员,[a,b,c,d,e],我需要看看是否已经存在一支完全由这些球员组成的球队(不多也不少(。确实如此,在这种情况下是team_id:1。
如果我有一个球员数组,比如[a,g,f,b,c],我需要能够看到这些球员的这种组合(不多也不少(还不存在,所以我可以将团队3添加到团队表中,将这些球员添加到teams_players中的行中,并将团队3作为他们的team_id。
一支球队的球员数量永远是5人,他们在球队中的顺序无关紧要。因此[a,b,c,d,e]应该被视为与[e,a,b,d,c]相同的团队。
对于您的第一个问题,您可以使用以下查询来断言玩家[a,b,c,d,e]
而不是其他玩家在给定的团队中比赛:
SELECT team_id
FROM teams_players
GROUP BY team_id
HAVING COUNT(DISTINCT player_id) = 5 AND
SUM(player_id NOT IN ('a', 'b', 'c', 'd', 'e')) = 0;