Masalah Anda adalah Anda tidak menghitung marktwert
nilai untuk pemain (Spieler) yang berusia lebih dari 31 tahun (geburtstag =ulang tahun). Pernyataan UPDATE Anda mencoba menulis NULL
ke dalam marktwert
kolom, yang didefinisikan sebagai NOT NULL
. Dan itu menghasilkan kesalahan.
Solusi:
1) Pengguna ELSE
di CASE
. Anda pernyataan dan menetapkan nilai default:
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) Izinkan NULL
nilai untuk kolom marktwert
:
CREATE TABLE `_spieler` (
...
`marktwert` int(10) NULL DEFAULT '0',
...
)
3) Gunakan WHERE
kondisi:
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;
Pembaruan:Anda juga dapat menghapus marktwert
kolom dan gunakan tampilan
(tabel terhitung) sebagai gantinya:
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 ;
Pembaruan 2:
Jika Anda menggunakan MariaDB, Anda juga dapat menggunakan Kolom Virtual (Dihitung)