更新が必要なテーブルにカラムがあります。列は次のように計算されます。SQL計算カラムを更新する
SELECT 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
FROM _spieler;
この表のすべてのレコードの列を更新したいとします。
私は
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;
のようなものを使用することができますクエリが正しいように思える、しかし、それは行ごとにゼロに「marktwert」に値を設定します。
CREATE TABLE `_spieler` (
`id` int(10) NOT NULL,
`vorname` varchar(30) DEFAULT NULL,
`nachname` varchar(30) DEFAULT NULL,
`geburtstag` date NOT NULL,
`w_staerke` tinyint(3) NOT NULL,
`w_technik` tinyint(3) NOT NULL,
`marktwert` int(10) NOT NULL DEFAULT '0',
`age` tinyint(3) DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=535 ;
(1, 'Adam', 'Federici', '1985-01-31', 30, 20, 0, NULL),
(2, 'Ryan', 'Allsop', '1992-06-17', 20, 30, 0, NULL),
(3, 'Tyrone', 'Mings', '1980-03-13', 40, 20, 0, NULL),
(4, 'Joe', 'Bennett', '1990-03-28', 25, 30, 0, NULL),
(5, 'Charlie', 'Daniels', '1986-09-07', 50, 30, 0, NULL);
テーブル定義といくつかのサンプルデータが
UPDATE _spieler
SET marktwert = CASE WHEN TIMESTAMPDIFF(YEAR, geburtstag, NOW()) <= 27 THEN ((w_staerke/100*70) + (w_technik/100*30)) * 600000
WHEN TIMESTAMPDIFF(YEAR, geburtstag, NOW()) <= 31 THEN (((w_staerke/100*70) + (w_technik/100*30)) * 600000) - 5000000
WHEN TIMESTAMPDIFF(YEAR, geburtstag, NOW()) > 31 THEN (((w_staerke/100*70) + (w_technik/100*30)) * 600000) - 10000000 END
最終クエリは、あなたの問題は、あなたが(プレーヤーのための任意のmarktwert
値より古い31年である(Spieler)を計算していないということです
SOはSQLチュートリアルですか? –
恒星の質問 –
ここで彼は新しいです、私は彼に古い質問に基づいて新しい質問を作成するように提案しました。私は彼が少し急いで、この貧弱な公式のものを投稿したと思います。私はいくつかの文脈を追加するために完全に書き直しました。あなたはあなたのダウンフォートを取り戻すことができますので、将来的に助けを求めることに落胆することはありませんか? :)) –