以下MySQL语句需要很长时间才能执行,我想因为我正在使用 gameId IN 。
我认为最有效的方法是使用 INNER JOIN ,但我是MySQL的新手,我无法想出 INNER JOIN 语句。你能帮帮我吗?如果有一种比 INNER JOIN 更有效的方式,我想使用它,我只是不确定是否存在。
需要提高效率的声明:
SELECT championId
FROM match_up WHERE
gameId IN
(
SELECT gameId
FROM match_up
GROUP BY gameId
HAVING SUM(championId IN (19, 23, 40) AND win = 1) = 3
AND SUM(championId IN (7, 18) AND win = 0) = 2
)
提前感谢您的帮助和知识!
答案 0 :(得分:1)
像
这样的东西SELECT m.championId
FROM match_up m INNER JOIN
(
SELECT gameId
FROM match_up
GROUP BY gameId
HAVING SUM(championId IN (19, 23, 40) AND win = 1) = 3
AND SUM(championId IN (7, 18) AND win = 0) = 2
) s ON m.gameID = s.gameID
之间的区别
答案 1 :(得分:0)
这是一个可能在match_up(gameId, win, championId)
上使用索引执行will的方法:
select *
from match_up m
where 3 = (select count(*)
from match_up m2
where m2.gameId = m.gameId and
m2.championId IN (19, 23, 40) and
m2.win = 1
) and
2 = (select count(*)
from match_up m2
where m2.gameId = m.gameId and
m2.championId IN (7, 18) and
m2.win = 0
);