Ditt problem är att du inte beräknar någon marktwert
värde för spelare (Spieler) som är äldre än 31 år (geburtstag =födelsedag). Din UPDATE-sats försöker skriva NULL
till marktwert
kolumn, som definieras som NOT NULL
. Och det resulterar i ett fel.
Lösningar:
1) Användare ELSE
i ditt CASE
och ange ett standardvärde:
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) Tillåt NULL
värde för kolumnen marktwert
:
CREATE TABLE `_spieler` (
...
`marktwert` int(10) NULL DEFAULT '0',
...
)
3) Använd en WHERE
skick:
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;
Uppdatering:Du kan också ta bort marktwert
kolumn och använd en vy
(beräknad tabell) istället:
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 ;
Uppdatering 2:
Om du använder MariaDB kan du också använda Virtuella (beräknade) kolumner