根据列的最高值更改列

时间:2010-07-20 03:33:16

标签: sql mysql

我有一个列num,我正在尝试更新列num = num / MAX(num)。现在的问题是MAX(num)应该在整个更新期间保持静态..它应该是更新之前的MAX。我想知道这是否可以在一个SQL语句中执行。显而易见的解决方案,否则我正在使用它

val = select max(num) from table;

update table set num = num / val

2 个答案:

答案 0 :(得分:2)

我不确定语法,或性能影响是什么,但是这样的事情怎么样?

UPDATE table
JOIN (SELECT MAX(num) AS val FROM table)
SET num = num / val;

答案 1 :(得分:0)

请记住

SET @val = (SELECT MAX(num) FROM table);
UPDATE table SET num = num / @val;

大多数接口都允许您将上述内容作为一个语句执行。

与此同时,预期

UPDATE table
SET num = num / (SELECT MAX(num) FROM table);

不起作用,因为您尝试在mysql中更新的同一个表上没有子查询。

然而

UPDATE table
SET num = num / (SELECT val FROM (SELECT MAX(num) AS val FROM table) tmp);

从子查询中创建临时表并绕过限制。