为什么`if(id = max(id),id,id + 1)在mysql中无法正常工作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么`if(id = max(id),id,id + 1)在mysql中无法正常工作相关的知识,希望对你有一定的参考价值。
在下表People
中:
id name
1 James
2 Yun
3 Ethan
如果我想找到可以运行此查询的最大ID
select max(id) id from People;
结果是
id
3
如果我想为除最后一行以外的所有行将id增加1,我尝试了此操作:
select if(id=max(id), id, id+1) id, name from People
令人惊讶的是,我得到了
为什么max()
不能像以前那样工作?为什么只返回一行(看起来像第一行)?我想我知道如何解决此问题,如下所示:
select if(id=lastID, id, id+1) id,, name from People,
(select max(id) lastID from People) People_max
order by id;
然后我得到了我所期望的:
但是我想我仍然不知道为什么前一个不起作用。
谢谢
答案
您需要使用子查询来获取最大值:
SELECT
IF(id = (SELECT MAX(id) FROM People), id, id+1) id,
name
FROM People
ORDER BY id;
[当您在原始单级查询中引用MAX(id)
时,您是在告诉mysql以表级聚合模式执行查询。这意味着它将只返回代表整个表的汇总的单个记录。通过切换到子查询,它可以按照您想要的方式运行。顺便说一句,如果您使用的是MySQL 8+,那么我们可以在此处使用解析函数来使查询的详细程度降低:
SELECT
IF(id = MAX(id) OVER (), id, id+1) id,
name
FROM People
ORDER BY id;
以上是关于为什么`if(id = max(id),id,id + 1)在mysql中无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
Oracle:max(id)+1 和 sequence.nextval 之间的区别
如何在 tweepy(python)中获取推文 ID(since_id,max_id)?