繁体   English   中英

mysql 更新 if 和 max

[英]mysql update with if and max

我已经为此浪费了几个小时,但对我来说没有任何效果。

我已经提交了默认为 NULL 的 strp_aa。 归档的 strp_aa 仅在其值为空且 MAX strp_aa + 1 时才应更新,如果它不为空(如果它已经有一个数字)则应保持不变。

代码的简短版本是

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;

我尝试了多种类似这里提到的更新 MySQL 与 if 条件

UPDATE STRANKEP
SET strp_aa = CASE WHEN strp_aa = NULL THEN  MAX(strp_aa) + 1 ELSE strp_aa END
WHERE strp_ID = 36;

我还发现这个mysql 查询将字段更新为 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 上设置了一个数字,这也只是继续添加一个......我不知道还能尝试什么。

编辑: @GMB 回答有一点问题,因为所有字段都以 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 

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM