MySQL:INNER JOIN在本声明中是否最有效?

时间:2014-06-09 19:17:57

标签: mysql

以下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
)

提前感谢您的帮助和知识!

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

查看Row SubqueriesSubqueries in the FROM Clause

之间的区别

答案 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
          );