最大id为的mysql select行返回错误数据

ffscu2ro  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(802)

我有一张table如下:

tabl1 :
        id      name     created_on
        ----   ------    ----------
        1       red        2016
        2       green      2017
        3       blue       2018

并查询如下

select max(id),
           name,
           created_on
    from   tabl1

结果:

id     name    created_on    
    ---    ----    ----------
    3      red      2016

在这里,我得到的最大id是正确的,但名称和创建的值不是来自同一行。如何返回这样的结果:

id     name    created_on    
    ---    ----    ----------
    3      blue      2018
xmakbtuz

xmakbtuz1#

我可以用 LIMIT 在这里:

SELECT id, name, created_on
FROM yourTable
ORDER BY id DESC
LIMIT 1;

如果您使用的是mysql 8或更高版本,那么您还有另一个选择:

SELECT id, name, created_on
FROM
(
    SELECT id, name, created_on, ROW_NUMBER() OVER (ORDER BY id DESC) rn
    FROM yourTable
) t
WHERE rn = 1;
kfgdxczn

kfgdxczn2#

您应该使用具有max id的内部连接来检索正确的行

select * from tabl1 
inner join  (
    select max(id) max_id
    from   tabl1
) t on t.max_id = tabl1.id

如果没有正确的group by子句,最新版本的mysql不允许aggreagtion函数的结果(不在agregation函数中,不在group by子句中)没有列名称声明,并且旧版本的结果不可预测

相关问题