这是我的表:
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
在这种情况下是否可以避免子查询?
答案 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解释如何执行此操作