Вашият проблем е, че не изчислявате никакъв marktwert
стойност за играчи (Spieler), които са на възраст над 31 години (geburtstag =рожден ден). Вашият оператор UPDATE се опитва да запише NULL
в marktwert
колона, която е дефинирана като NOT NULL
. И това води до грешка.
Решения:
1) Потребител ELSE
във вашия CASE
оператор и задайте стойност по подразбиране:
UPDATE _spieler SET marktwert = CASE
WHEN TIMESTAMPDIFF(YEAR, geburtstag, NOW()) <= 27 THEN ((w_staerke/100*70) + (w_technik/100*30))
WHEN TIMESTAMPDIFF(YEAR, geburtstag, NOW()) <= 31 THEN ((w_staerke/100*70) + (w_technik/100*30))
ELSE 0
END;
2) Разрешете NULL
стойност за колона marktwert
:
CREATE TABLE `_spieler` (
...
`marktwert` int(10) NULL DEFAULT '0',
...
)
3) Използвайте WHERE
състояние:
UPDATE _spieler SET marktwert = CASE
WHEN TIMESTAMPDIFF(YEAR, geburtstag, NOW()) <= 27 THEN ((w_staerke/100*70) + (w_technik/100*30))
WHEN TIMESTAMPDIFF(YEAR, geburtstag, NOW()) <= 31 THEN ((w_staerke/100*70) + (w_technik/100*30))
END
WHERE TIMESTAMPDIFF(YEAR, geburtstag, NOW()) <= 31;
Актуализация:Можете също да премахнете marktwert
колона и използвайте изглед
(изчислена таблица) вместо това:
CREATE VIEW `_spieler_view` AS SELECT s.*,
CASE
WHEN TIMESTAMPDIFF(YEAR, geburtstag, NOW()) <= 27 THEN ((w_staerke/100*70) + (w_technik/100*30))
WHEN TIMESTAMPDIFF(YEAR, geburtstag, NOW()) <= 31 THEN ((w_staerke/100*70) + (w_technik/100*30))
END AS marktwert_calculated
from _spieler s ;
Актуализация 2:
Ако използвате MariaDB, можете също да използвате Виртуални (изчислени) колони