Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cập nhật SQL một cột được tính toán

Vấn đề của bạn là bạn không tính toán bất kỳ marktwert nào giá trị cho người chơi (Spieler) trên 31 tuổi (geburtstag =ngày sinh). Câu lệnh UPDATE của bạn đang cố viết NULL vào marktwert , được định nghĩa là NOT NULL . Và điều đó dẫn đến lỗi.

Giải pháp:

1) Người dùng ELSE trong CASE của bạn và đặt giá trị mặc định:

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) Cho phép NULL giá trị cho cột marktwert :

CREATE TABLE `_spieler` (
  ...
  `marktwert` int(10) NULL DEFAULT '0',
  ...
)

3) Sử dụng WHERE điều kiện:

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;

Cập nhật:Bạn cũng có thể xóa marktwert và sử dụng chế độ xem (bảng được tính toán) thay vào đó:

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 ;

Cập nhật 2:

Nếu bạn sử dụng MariaDB, bạn cũng có thể sử dụng Cột ảo (Tính toán)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có an toàn khi so sánh các chuỗi với 'lớn hơn' và 'nhỏ hơn' trong MySQL không?

  2. Làm cách nào để mô phỏng một biến mảng trong MySQL?

  3. Đối số được cung cấp Mysql_fetch_array không phải là kết quả MYSQL hợp lệ

  4. giải thích lệnh trong mysql

  5. Kích thước trường ký tự lớn trong SAS