Uw probleem is dat u geen marktwert
. berekent waarde voor spelers (Spieler) die ouder zijn dan 31 jaar (geburtstag =verjaardag). Uw UPDATE-instructie probeert NULL
te schrijven in de marktwert
kolom, die is gedefinieerd als NOT NULL
. En dat resulteert in een fout.
Oplossingen:
1) Gebruiker ELSE
in uw CASE
statement en stel een standaardwaarde in:
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) Sta NULL
toe waarde voor kolom marktwert
:
CREATE TABLE `_spieler` (
...
`marktwert` int(10) NULL DEFAULT '0',
...
)
3) Gebruik een WHERE
staat:
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;
Update:je kunt ook de marktwert
. verwijderen kolom en gebruik een weergave
(berekende tabel) in plaats daarvan:
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 ;
Update 2:
Als u MariaDB gebruikt, kunt u ook Virtual (Computed) Columns