Dit problem er, at du ikke beregner nogen marktwert
værdi for spillere (Spieler), der er ældre end 31 år (geburtstag =fødselsdag). Din UPDATE-sætning forsøger at skrive NULL
ind i marktwert
kolonne, som er defineret som NOT NULL
. Og det resulterer i en fejl.
Løsninger:
1) Bruger ELSE
i din CASE
sætning og indstil en standardværdi:
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) Tillad NULL
værdi for kolonne marktwert
:
CREATE TABLE `_spieler` (
...
`marktwert` int(10) NULL DEFAULT '0',
...
)
3) Brug en WHERE
tilstand:
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;
Opdatering:Du kan også fjerne marktwert
kolonne og brug en visning
(beregnet tabel) i stedet:
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 ;
Opdatering 2:
Hvis du bruger MariaDB kan du også bruge Virtuelle (beregnet) kolonner