社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

为什么“if(id=max(id),id,id+1)”在mysql中不能正常工作

JamesWang • 5 年前 • 1259 次点击  

在下表中 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

令人惊讶的是,我

enter image description here

为什么 max() 不象以前那样工作吗为什么只返回一行(看起来只返回第一行)? 我想我知道如何解决这个问题,如下所示:

select if(id=lastID, id, id+1) id,, name from People,
(select max(id) lastID from People) People_max
order by id;

然后我得到了我想要的:

enter image description here

但我想我还是不知道为什么前一个不起作用。

谢谢

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/48499
 
1259 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Tim Biegeleisen
Reply   •   1 楼
Tim Biegeleisen    5 年前

需要使用子查询获取最大值:

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;