問題は、marktwert
を計算しないことです。 31歳以上のプレーヤー(Spieler)の値(geburtstag =誕生日)。 UPDATEステートメントがNULL
を書き込もうとしています marktwert
に NOT NULL
として定義されている列 。その結果、エラーが発生します。
ソリューション:
1)ユーザーELSE
CASE
で ステートメントを作成し、デフォルト値を設定します:
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
を許可する 列marktwert
の値 :
CREATE TABLE `_spieler` (
...
`marktwert` int(10) NULL DEFAULT '0',
...
)
3)WHERE
を使用します 状態:
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;
更新:marktwert
を削除することもできます 列を作成し、ビュー
を使用します (計算された表)代わりに:
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 ;
アップデート2:
MariaDBを使用する場合は、仮想(計算)列>