2014-06-09 19 views
1

下面的MySQL語句需要很長時間才能執行,我想因爲我使用的是gameId INMySQL:內部加入在這個聲明中是最有效率的嗎?

我認爲最有效的方法是使用一個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 
) 

預先感謝您的幫助和知識!

回答

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

0

這裏的區別是,可能會在match_up(gameId, win, championId)與索引執行遺囑的方法:

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