我有一列,num,并且我试图更新列,使num = num/MAX(num)
。现在的事情是MAX(num)在更新过程中应保持静态。它应该是更新之前的MAX。我想知道这是否可以在一个SQL语句中完成。否则我目前使用它的明显的解决方案基于最高值更改列
val = select max(num) from table;
update table set num = num/val
我有一列,num,并且我试图更新列,使num = num/MAX(num)
。现在的事情是MAX(num)在更新过程中应保持静态。它应该是更新之前的MAX。我想知道这是否可以在一个SQL语句中完成。否则我目前使用它的明显的解决方案基于最高值更改列
val = select max(num) from table;
update table set num = num/val
我不能确定的语法,或者对性能的影响会是什么,但如何对这样的事情?
UPDATE table
JOIN (SELECT MAX(num) AS val FROM table)
SET num = num/val;
记住
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);
创建临时表脱离子查询并绕过限制。
每个派生表在mysql中必须有它自己的别名。否则+1 – Unreason 2010-07-20 07:51:15