【问题标题】:optimal query for mysqlmysql的最佳查询
【发布时间】:2012-11-29 23:10:10
【问题描述】:

我有一个如下所示的表:

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

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

【问题讨论】:

  • 如果您想要更快,(除了我们想知道它是否很慢)使用 Explain 为您的查询添加前缀,然后发布结果,除了 Name 上的索引,虽然我没有看到很多可能性。跨度>

标签: mysql sql join self-join


【解决方案1】:

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

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 两者

【讨论】:

  • 我的简单示例不足以与我的实际情况进行比较。扩展我的问题以显示这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-12
相关资源
最近更新 更多