我有一个列num,我正在尝试更新列num = num / MAX(num)
。现在的问题是MAX(num)应该在整个更新期间保持静态..它应该是更新之前的MAX。我想知道这是否可以在一个SQL语句中执行。显而易见的解决方案,否则我正在使用它
val = select max(num) from table;
update table set num = num / val
答案 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);
从子查询中创建临时表并绕过限制。