mySQL使用最大日期更新值

时间:2012-11-21 21:58:54

标签: mysql sql database

我有这个查询,我希望能够在我的程序完成执行请求时将exec值更新为 TRUE 并将其保存到我的数据库,以便将其用作队列但是,每当我尝试使用此查询时,它都会出现错误。

UPDATE motor 
SET exec=1 
where time=(SELECT max(time) 
            FROM motor 
            WHERE exec=0);

错误:

  

错误1093(HY000):您无法在FROM子句中指定目标表'motor'进行更新

我该怎么做?

4 个答案:

答案 0 :(得分:11)

这是因为你的UPDATE可能会循环。

使用此代码代替:

UPDATE motor 
SET exec = 1 
WHERE exec = 0 
ORDER BY time DESC 
LIMIT 1;

答案 1 :(得分:0)

您必须将此作为两个单独的查询。另外,为什么不让你的程序跟踪它在队列中工作的“电机”的主键并根据它进行更新?

答案 2 :(得分:0)

您应该将从SELECT语句获得的值赋给变量,如下所示:

DECLARE varTime datetime;
SELECT varTime := max(time) FROM motor WHERE exec=0;
UPDATE motor SET exec=1 where time= varTime 

我对语法不太确定,因为我主要使用MS SQL Server,但我知道它应该是相同的。

答案 3 :(得分:-1)

您接受的答案是正确的。是否也可以用这个获得相同的结果:

UPDATE
  motor inner join
  (SELECT max(time) as time
   FROM motor 
   WHERE exec=0) mx on motor.time = mx.time 
SET motor.exec=1;

唯一的区别是,如果有多个行具有相同的最大值,LIMIT 1将仅更新其中一行,而这将更新所有行。