为什么'if(id=max(id),id,id+1)`在mysql中不能正常工作
下表中的人员: 如果我想找到最大id,我可以运行此查询为什么'if(id=max(id),id,id+1)`在mysql中不能正常工作,mysql,sql,Mysql,Sql,下表中的人员: 如果我想找到最大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, i
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;
当您在原始的单级查询中引用MAXid时,您告诉MySQL以表级聚合模式执行查询。这意味着它将只返回一条记录,表示整个表的集合。通过切换到子查询,它的行为符合您的要求。顺便说一下,如果您使用的是MySQL 8+,那么我们可以在这里使用分析函数来减少查询的详细程度:
SELECT
IF(id = MAX(id) OVER (), id, id+1) id,
name
FROM People
ORDER BY id;
您需要使用子查询来获取最大值:
SELECT
IF(id = (SELECT MAX(id) FROM People), id, id+1) id,
name
FROM People
ORDER BY id;
当您在原始的单级查询中引用MAXid时,您告诉MySQL以表级聚合模式执行查询。这意味着它将只返回一条记录,表示整个表的集合。通过切换到子查询,它的行为符合您的要求。顺便说一下,如果您使用的是MySQL 8+,那么我们可以在这里使用分析函数来减少查询的详细程度:
SELECT
IF(id = MAX(id) OVER (), id, id+1) id,
name
FROM People
ORDER BY id;
你应该为它定义一个变量吗?如果为其定义变量,SET@id=maxid可能会很有用?SET@id=maxid可能对上面的分析函数有用,这与行数函数有关吗?这是否意味着MySQL8+支持这一点?我实际上在使用MariaDB,因为我喜欢它附带的HeidySQL。如果我下载MySQL8+,会有类似的情况吗?安装容易吗?我发现一些MariaDB版本很难安装?如果是较新的版本,MariaDB可能也支持分析功能。分析功能结束,与行数功能相关吗?这是否意味着MySQL8+支持这一点?我实际上在使用MariaDB,因为我喜欢它附带的HeidySQL。如果我下载MySQL8+,会有类似的情况吗?那么容易安装吗?我发现一些MariaDB版本很难安装?如果是较新的版本,MariaDB可能也支持分析功能。