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)