【问题标题】:MySQL: Would INNER JOIN Be The Most Efficient In This Statement?MySQL:INNER JOIN 在这个语句中会是最有效的吗?
【发布时间】:2014-06-09 19:17:56
【问题描述】:

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

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

【问题讨论】:

    标签: mysql


    【解决方案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的区别

    【讨论】:

      【解决方案2】:

      这是一个可以在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
                );
      

      【讨论】:

        猜你喜欢
        • 2011-02-18
        • 1970-01-01
        • 1970-01-01
        • 2011-07-30
        • 1970-01-01
        • 1970-01-01
        • 2019-12-11
        • 1970-01-01
        • 2016-06-10
        相关资源
        最近更新 更多