आपकी समस्या यह है कि आप किसी 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:
यदि आप मारियाडीबी का उपयोग करते हैं तो आप वर्चुअल (गणना) कॉलम