Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL актуализира изчислена колона

Вашият проблем е, че не изчислявате никакъв marktwert стойност за играчи (Spieler), които са на възраст над 31 години (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, можете също да използвате Виртуални (изчислени) колони




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Търсенето на последния знак в SQL Regex не работи

  2. Използване на SQL JOIN и COUNT

  3. SQL Актуализиране на редове без да се знае името на колоната

  4. CakePHP 1.3 - Неизвестна колона в клаузата where

  5. Защо тази съхранена функция в MySQL дава различни резултати от изчислението в заявката?