Seu problema é que você não calcula nenhum
marktwert valor para jogadores (Spieler) com mais de 31 anos (geburtstag =aniversário). Sua instrução UPDATE está tentando escrever NULL no marktwert coluna, que é definida como NOT NULL . E isso resulta em um erro. Soluções:
1) Usuário
ELSE em seu CASE declaração e defina um valor padrão: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) Permitir
NULL valor para a coluna marktwert :CREATE TABLE `_spieler` (
...
`marktwert` int(10) NULL DEFAULT '0',
...
)
3) Use um
WHERE doença: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;
Atualização:você também pode remover o
marktwert coluna e use uma visualização
(tabela calculada) em vez disso: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 ;
Atualização 2:
Se você usa o MariaDB, também pode usar Colunas virtuais (computadas)