在下表People
中:
id name
1 James
2 Yun
3 Ethan
如果我想找到最大 ID,我可以运行此查询
select max(id) id from People;
结果是
NHẬN DẠNG
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;
然后我得到了我所期望的:
但是我想我还是不知道为什么前面那个不行。
Cảm ơn
您需要使用子查询来获取最大值:
SELECT
IF(id = (SELECT MAX(id) FROM People), id, id+1) id,
tên
FROM People
ORDER BY id;
当您在原始单级查询中引用 MAX(id)
时,您是在告诉 MySQL 以表级聚合模式执行查询。这意味着它将只返回代表整个表的聚合的单个记录。通过切换到子查询,它会按照您想要的方式运行。顺便说一句,如果您使用的是 MySQL 8+,那么我们可以在此处使用分析函数来使查询不那么冗长:
SELECT
IF(id = MAX(id) OVER (), id, id+1) id,
tên
FROM People
ORDER BY id;
Tôi là một lập trình viên xuất sắc, rất giỏi!