Я потерял часы на этом, и у меня ничего не работает.
Я подал strp_aa по умолчанию NULL. Поле strp_aa должно обновляться только в том случае, если его значение NULL равно 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, если условие :
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