我正在尝试建立一个SQL数据库来记录游戏中发生的3人阵容。我现在的结构是:

播放器

玩家ID
选手姓名

排队

lineupID

阵容玩家

lineupID(外键)
playerID(外键)

我想找到一种快速的方法来检查一组特定的3名球员是否已经加入阵容。假设我想找到一个与玩家A,B,C在一起的阵容,我能想到的解决方案是:

SELECT t1.lineupID
FROM (SELECT lineupID FROM Lineup_players WHERE playerID=A) t1
INNER JOIN (SELECT lineupID FROM Lineup_players WHERE playerID=B) t2 ON t1.lineupID = t2.lineupID
INNER JOIN (SELECT lineupID FROM Lineup_players WHERE playerID=C) t3 ON t1.lineupID = t3.lineupID


我觉得这是一个笨拙的解决方案。使用相同的表是否有更快的查询,还是有更好的存储数据的方法?

另外,如果我的阵容中有球员A,B,C,D,E,是否有一种快速的方法来查找其中任何三个球员的所有阵容而无需检查所有20个组合?

最佳答案

也许您正在寻找这样的东西?

select
  lineupid,
  count(*)
from
  Lineup_players
where
  playerid in (A,B,C,D,E)
group by
  lineupid
having
  count(*) >= 3


这将列出具有3个或更多列出ID的阵容。

关于mysql - 优化SQL以查找体育(篮球)阵容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30629667/

10-10 23:12