Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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和max更新mysql_Mysql_Sql_Join_Sql Update_Max - Fatal编程技术网

使用if和max更新mysql

使用if和max更新mysql,mysql,sql,join,sql-update,max,Mysql,Sql,Join,Sql Update,Max,我在这件事上浪费了好几个小时,什么都不管用 我已经提交了默认为空的strp_aa。仅当文件strp_aa为null且最大strp_aa+1时,才应更新该文件,如果文件strp_aa不为null,则应保持不变 代码的简短版本是 UPDATE STRANKEP SET strp_aa = IF(strp_aa=null, strp_aa+1, strp_aa) WHERE strp_ID=36; 也累了 UPDATE STRANKEP SET strp_aa = I

我在这件事上浪费了好几个小时,什么都不管用

我已经提交了默认为空的strp_aa。仅当文件strp_aa为null且最大strp_aa+1时,才应更新该文件,如果文件strp_aa不为null,则应保持不变

代码的简短版本是

UPDATE STRANKEP
SET strp_aa = IF(strp_aa=null, strp_aa+1, strp_aa)
WHERE strp_ID=36;
也累了

UPDATE STRANKEP
                SET strp_aa = IF(strp_aa=null, (SELECT MAX(strp_aa)) +1, (SELECT (strp_aa) WHERE strp_ID=36)
                WHERE strp_ID=36;

我尝试了多种方法,比如这里提到的:

我也发现了这一点,并尝试了各种组合与提供的答案,它不会为我工作。其中一个版本是:

    UPDATE STRANKEP
                    SET strp_aa = IF((SELECT strp_aa )!=null,((SELECT selected_value2 FROM (SELECT (strp_aa) AS selected_value2 FROM STRANKEP WHERE strp_ID=36) AS sub_selected_value2)), ((SELECT selected_value FROM (SELECT MAX(strp_aa) AS selected_value FROM STRANKEP) AS sub_selected_value) + 1)  )
                    WHERE strp_ID=36;

即使strp_aa上设置了一个数字,也要继续添加一个。。。 我不知道还能尝试什么

编辑: Had的@GMB answer没有什么问题,因为所有字段都以NULL开头,所以max(strp_aa)给出0个结果,以防所有字段中都没有数字。 我用COALESCE语句解决了这个问题,如果有人有类似的问题,我会把它贴在这里

UPDATE STRANKEP t
CROSS JOIN (select COALESCE(MAX(strp_aa),0) max_strp_aa from STRANKEP) m
set t.strp_aa = m.max_strp_aa + 1
where t.strp_ID = 36 and t.strp_aa is null 

您可以使用
更新。。。join
此的语法:

update strankep s
cross join (select max(strp_aa) max_strp_aa from strankep) m
set s.strp_aa = m.max_strp_aa + 1
where s.strp_id = 36 and s.strp_aa is null

cross-join
strp_aa
的最大值带到整个表中。
where
子句消除了
strp\u aa
中的行不为
null

哦,天哪,它能用。我找anwser找了半天没找到CROSS JOIN,我以前从未用过它。非常感谢你!我将进一步研究这个函数!是的,在我脑海中出现的地方消除它是完全有意义的。当没有带数字的字段时,有可能实现这一点吗?当所有字段都为空时,MAX失败了。我想这可以通过一些案例陈述来完成?我用案例解决了它,并更新了我的帖子,让大家看看是否感兴趣。再次感谢你的帮助。
update strankep s
cross join (select max(strp_aa) max_strp_aa from strankep) m
set s.strp_aa = m.max_strp_aa + 1
where s.strp_id = 36 and s.strp_aa is null