Váš problém je v tom, že nepočítáte žádný marktwert
hodnota pro hráče (Spieler), kteří jsou starší 31 let (geburtstag =narozeniny). Váš příkaz UPDATE se pokouší zapsat NULL
do marktwert
sloupec, který je definován jako NOT NULL
. A to má za následek chybu.
Řešení:
1) Uživatel ELSE
ve vašem CASE
a nastavte výchozí hodnotu:
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) Povolte NULL
hodnotu pro sloupec marktwert
:
CREATE TABLE `_spieler` (
...
`marktwert` int(10) NULL DEFAULT '0',
...
)
3) Použijte WHERE
podmínka:
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;
Aktualizace:Můžete také odstranit marktwert
a použijte zobrazení
(vypočítaná tabulka) místo:
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 ;
Aktualizace 2:
Pokud používáte MariaDB, můžete také použít Virtuální (počítané) sloupce