mysql - mysql 用 if 和 max 更新
问题描述
我在这件事上浪费了几个小时,没有什么对我有用。
我已经提交了默认为 NULL 的 strp_aa。归档的 strp_aa 仅在其为 MAX strp_aa + 1 为 null 时才应更新,并且如果它不是 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;
我尝试了多种方法,例如此处提到的使用 if 条件更新 MySQL:
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
。
推荐阅读
- phaser-framework - 为什么显示 2 个精灵而不是 1 个?
- jenkins - 在第一次运行 Dsl 脚本时运行,但在更新 dsl 脚本后面临问题
- php - 无法连接到 Linux 服务器上的 AD LDAP:PHP 致命错误
- php - 如何在 laravel 5.5 中对表格进行分页?
- css - CSS 在 VS 2017 的设计模式下不适用于母版页以及母版页的内容页面?
- android - JwPlayer ChromeCast:无法投射:不支持媒体格式
- javascript - ReactDOM.hydrate() 在初始 SSR (React JS) 后不起作用
- python - PyQt5 QMediaplayer找不到服务错误
- python - 将字符串中的列名分配给数据框 - Python
- ios - Xamarin 表单上的 FlexLayout,未填充项目行为?