SQL SELECT行FROM表WHERE id = max(id)

Vic*_*ita 134 mysql sql

我该怎么办?我一直在努力解决这个问题大约一个小时.很沮丧.任何帮助都是极好的!

unu*_*tbu 220

您可以使用子选择:

SELECT row 
FROM table 
WHERE id=(
    SELECT max(id) FROM table
    )
Run Code Online (Sandbox Code Playgroud)

请注意,如果值max(id)不唯一,则返回多行.

如果你只想要一个这样的行,请使用@MichaelMior的答案,

SELECT row from table ORDER BY id DESC LIMIT 1
Run Code Online (Sandbox Code Playgroud)

  • @AlirezaSoori:尽管名称,`id`只是表格中的一列.无法保证`id`列中的值必须是唯一的. (6认同)
  • @MichaelMior:`id`可以是外键,在这种情况下它可能不是唯一的.我使用`set profiling = 1进行了一些基准测试; ...; show profiles`看起来我们的解决方案使用MySQL具有相同的性能.根据我自己的知识,您是否知道DBMS对子选择的性能较差? (3认同)
  • 为什么max(id)不是唯一的?你能解释一下吗? (2认同)

Mic*_*ior 141

你也可以这样做

SELECT row FROM table ORDER BY id DESC LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

这将按行ID按降序对行进行排序,并返回第一行.这与返回具有最大ID的行相同.这当然假设id在所有行中都是唯一的.否则可能有多行具有最大值id,您只能得到一行.


Rus*_*ton 25

SELECT * 
FROM table 
WHERE id = (SELECT MAX(id) FROM TABLE)
Run Code Online (Sandbox Code Playgroud)


小智 17

你不能给,order by因为order by在桌子上进行"全扫描".

以下查询更好:

SELECT * FROM table WHERE id = (SELECT MAX(id) FROM table);
Run Code Online (Sandbox Code Playgroud)

  • 如果你假设`id`是表的主键,`ORDER BY`将不会进行全扫描.(如果不是,它的命名相当差.)如果不是,那么你如何期望`MAX(id)`在没有全表扫描的情况下工作?如果没有索引,则仍必须检查每个值以找到最大值. (17认同)