如何避免子查询?

时间:2010-10-26 06:31:10

标签: sql mysql

这是我的表:

ID   KEY    VALUE
1    alpha  100
2    alpha  500
3    alpha  22
4    beta   60
5    beta   10

我正在尝试使用最新值(KEY最大值)检索所有ID - s的列表:

ID   KEY     VALUE
3    alpha   22
5    beta    10

在MySQL中我正在使用此查询,这是无效的:

SELECT temp.* FROM
  (SELECT * FROM t ORDER BY id DESC) AS temp
GROUP BY key

在这种情况下是否可以避免子查询?

3 个答案:

答案 0 :(得分:6)

使用INNER JOIN加入您的最大ID。

SELECT  t.*
FROM    t
        INNER JOIN (
          SELECT  ID = MAX(ID)
          FROM    t
          GROUP BY
                  key
        ) tm ON tm.ID = t.ID                  

假设ID列已编入索引,这可能与其获得的速度一样快。

答案 1 :(得分:3)

这里是the mysql documentation page that discusses this topic

它提出了三种不同的选择。

唯一不涉及子查询的是:

SELECT t1.id, t1.k, t1.value
FROM t t1
LEFT JOIN t t2 ON t1.k = t2.k AND t1.id < t2.id
WHERE t2.k IS NULL;

答案 2 :(得分:0)

page in the manual解释如何执行此操作