2010-07-20 38 views
1

我有一列,num,并且我试图更新列,使num = num/MAX(num)。现在的事情是MAX(num)在更新过程中应保持静态。它应该是更新之前的MAX。我想知道这是否可以在一个SQL语句中完成。否则我目前使用它的明显的解决方案基于最高值更改列

val = select max(num) from table;

update table set num = num/val

回答

2

我不能确定的语法,或者对性能的影响会是什么,但如何对这样的事情?

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

每个派生表在mysql中必须有它自己的别名。否则+1 – Unreason 2010-07-20 07:51:15

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); 

创建临时表脱离子查询并绕过限制。