Twój problem polega na tym, że nie obliczasz żadnego marktwert wartość dla graczy (Spieler), którzy mają więcej niż 31 lat (geburtstag =urodziny). Twoja instrukcja UPDATE próbuje napisać NULL w marktwert kolumna, która jest zdefiniowana jako NOT NULL . A to skutkuje błędem.
Rozwiązania:
1) Użytkownik ELSE w Twoim CASE oświadczenie i ustaw wartość domyślną:
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) Zezwól na NULL wartość dla kolumny marktwert :
CREATE TABLE `_spieler` (
...
`marktwert` int(10) NULL DEFAULT '0',
...
)
3) Użyj WHERE warunek:
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;
Aktualizacja:możesz również usunąć marktwert i użyj widoku
(tabela obliczeniowa) zamiast:
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 ;
Aktualizacja 2:
Jeśli korzystasz z MariaDB, możesz również użyć wirtualnych (obliczonych) kolumn