我为此花费了很多时间,对我来说没有任何用处。
我已将strp_aa提交为默认NULL。归档的strp_aa仅当其null为MAX strp_aa + 1时才应更新;如果其不为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 MySQL with if condition中提到的一件事:
UPDATE STRANKEP
SET strp_aa = CASE WHEN strp_aa = NULL THEN MAX(strp_aa) + 1 ELSE strp_aa END
WHERE strp_ID = 36;
我也找到了这个mysql query to update field to max(field) + 1,并尝试了提供答案的各种组合,但对我来说不起作用。版本之一是:
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上设置了一个数字,也要继续加一个...我不知道还能尝试什么。
您可以为此使用update ... 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_aa
不是null
的行。