[mysql更新if和max

问题描述 投票:0回答:1

我为此花费了很多时间,对我来说没有任何用处。

我已将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上设置了一个数字,也要继续加一个...我不知道还能尝试什么。

mysql sql sql-update max case
1个回答
1
投票

您可以为此使用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的行。

© www.soinside.com 2019 - 2024. All rights reserved.