Ihr Problem ist, dass Sie keinen marktwert
berechnen Wert für Spieler, die älter als 31 Jahre sind (geburtstag =Geburtstag). Ihre UPDATE-Anweisung versucht, NULL
zu schreiben in den marktwert
Spalte, die als NOT NULL
definiert ist . Und das führt zu einem Fehler.
Lösungen:
1) Benutzer ELSE
in Ihrem CASE
-Anweisung und legen Sie einen Standardwert fest:
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) NULL
zulassen Wert für die Spalte marktwert
:
CREATE TABLE `_spieler` (
...
`marktwert` int(10) NULL DEFAULT '0',
...
)
3) Verwenden Sie ein WHERE
Bedingung:
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:Sie können den marktwert
auch entfernen -Spalte und verwenden Sie eine Ansicht
(berechnete Tabelle) statt:
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 ;
Aktualisierung 2:
Wenn Sie MariaDB verwenden, können Sie auch virtuelle (berechnete) Spalten