Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

SQL एक परिकलित कॉलम को अपडेट करता है

आपकी समस्या यह है कि आप किसी marktwert . की गणना नहीं करते हैं खिलाड़ियों के लिए मूल्य (स्पीलर) जो 31 वर्ष से अधिक उम्र का है (गेबर्टस्टैग =जन्मदिन)। आपका अद्यतन विवरण 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:

यदि आप मारियाडीबी का उपयोग करते हैं तो आप वर्चुअल (गणना) कॉलम




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्क्रॉलपैन पर स्क्लाइट डेटा और ऑटो निर्मित बटन

  2. MySQL कनेक्शन पूल गणना

  3. कैशिंग फ़ंक्शन के साथ RSS जनरेटर

  4. रेल से MySQL संग्रहीत प्रक्रिया को कैसे कॉल करें?

  5. सरल अजाक्स Jquery स्क्रिप्ट- मैं तालिका में प्रत्येक पंक्ति के लिए जानकारी कैसे प्राप्त कर सकता हूं?