Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么'if(id=max(id),id,id+1)`在mysql中不能正常工作_Mysql_Sql - Fatal编程技术网

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

为什么'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

下表中的人员:

如果我想找到最大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;
当您在原始的单级查询中引用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可能也支持分析功能。