【发布时间】:2016-04-19 18:06:29
【问题描述】:
我的表中有一个列需要更新。该列的计算方式如下:
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
添加了最终查询
【问题讨论】:
-
你确定SO是SQL教程吗?
-
伙计们,他是新来的,我建议他在旧问题的基础上创建一个新问题。我想他有点赶时间并发布了这个配方不佳的帖子。我完全重写了它以添加一些上下文。你能收回你的反对票,这样他将来就不会气馁寻求帮助吗? :))
-
他们是对的,我为此道歉,真的应该花点时间。即使有点跑题了,我还是想再次感谢 Tudor 的理解和耐心,这在当今真的很少见
-
好的,我删除了反对票,现在你编辑了它,至少它有一些意义,Saint-Tudor ;)
-
"是否可以使用上面创建的别名中的值..?" - 您可以使用 VIEW(查看更新的答案)。