Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQL aktualizuje obliczoną kolumnę

Twój problem polega na tym, że nie obliczasz żadnego marktwert wartość dla graczy (Spieler), którzy mają więcej niż 31 lat (geburtstag =urodziny). Twoja instrukcja UPDATE próbuje napisać NULL w marktwert kolumna, która jest zdefiniowana jako NOT NULL . A to skutkuje błędem.

Rozwiązania:

1) Użytkownik ELSE w Twoim CASE oświadczenie i ustaw wartość domyślną:

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) Zezwól na NULL wartość dla kolumny marktwert :

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

3) Użyj WHERE warunek:

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;

Aktualizacja:możesz również usunąć marktwert i użyj widoku (tabela obliczeniowa) zamiast:

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 ;

Aktualizacja 2:

Jeśli korzystasz z MariaDB, możesz również użyć wirtualnych (obliczonych) kolumn




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NodeJS MySQL:mierz czas wykonania zapytania

  2. Jak połączyć się z MySQL za pomocą Node.js

  3. Uzyskaj aktualną wartość AUTO_INCREMENT dla dowolnej tabeli

  4. system rozliczeń cyklicznych

  5. Ile pamięci zajmie wartość null w DB?