Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

SQL memperbarui kolom terhitung

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)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa PostgreSQL sangat lambat di Windows?

  2. Cara membuat satu kolom tabel mySQL tidak terlihat

  3. MySQL:Pilih baris yang hanya memiliki nilai unik kecuali kolom

  4. Hapus semua baris yang tidak memiliki id di tabel lain

  5. MySQL Store Image BLOB Kinerja Praktik Buruk