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