使用if和max更新mysql
我在这件事上浪费了好几个小时,什么都不管用 我已经提交了默认为空的strp_aa。仅当文件strp_aa为null且最大strp_aa+1时,才应更新该文件,如果文件strp_aa不为null,则应保持不变 代码的简短版本是使用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
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