gpt4 book ai didi

mysql - 为什么 `if(id=max(id), id, id+1)` 在 mysql 中没有按预期工作

转载 作者:行者123 更新时间:2023-11-29 04:32:15 29 4
gpt4 key购买 nike

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

但是我想我还是不知道为什么前面那个不行。

谢谢

最佳答案

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

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;

关于mysql - 为什么 `if(id=max(id), id, id+1)` 在 mysql 中没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58677140/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com