mysql - mysql的最佳查询

标签 mysql sql join self-join

我有一个看起来像这样的表:

Table: id, name

一个名字可以出现多次。我试图找出一个最佳查询,该查询将为每个名称及其最高 ID 返回。

输入数据:

1, "a"
2, "a"
3, "b"
4, "a"
5", "b"

输出:

4, "a"
5, "b"

我知道一种在查询的 FROM 部分使用子查询来执行此操作的方法。我希望我能以某种方式做得更快。

我目前做的:

SELECT table.* 
FROM table, (SELECT MAX(id) maxid FROM table GROUP BY name) maxids 
WHERE table.id = maxids.maxid

我很好奇是否有更快的方法!

最佳答案

为什么要使用自连接,这应该可以正常工作:

select max(id), name
from yourtable
group by name

参见 SQL Fiddle with Demo

现在,如果您有更多列想要包含在最终结果中,那么您可以使用以下方法:

select t1.id, t1.name, t1.col1
from yourtable t1
inner join
(
  select max(id) id, name
  from yourtable
  group by name
) t2
  on t1.id = t2.id
  and t1.name = t1.name

甚至:

select t1.id, t1.name, t1.col1
from yourtable t1
where t1.id in (select max(t2.id)
                from yourtable t2
                group by t2.name);

参见 SQL Fiddle with Demo两者的

关于mysql - mysql的最佳查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13636484/

相关文章:

mysql - 查找使用 UNION 的 MySQL 查询替代方案 - 以便比较它们的速度

MySQL IF 给我 BLOB

sql - 如何从以前的xml查询结果中选择

mysql - SQL 根据另一个表中的相同表单元格更新表单元格

mysql - SQL 查询从一个或 3 个表中选择

php - 检查特定 id 的行是否出现在表格的前面

php - 我需要在 mysql 中显式删除 View 吗?

sql - Cosmos db sql查询用于在数组中搜索

sql - 在 JOIN 查询中使用 LIKE

mysql - 需要帮助优化 mysql 查询