我有一张这样的桌子:
表:activity

Date         Time      task_name  type
10-02-2014   07:00     Reporting  Scheduled
10-02-2014   1200      mailing    Failed
10-02-2014   16:00     Checking   Scheduled
11-02-2014   10:00     DDDD       Done

我想将一个名为type的列从Scheduled更新为Done的特定日期,该日期的时间是最短的。
下面是查询:
UPDATE activity
SET type = "Done"
WHERE
    type = "Scheduled"
    AND Date = "10-02-2014"
    AND time = (SELECT MAX(time) FROM activity WHERE Date = '10-02-2014');

但它抛出了一个错误:
错误1093(HY000):不能为update in FROM子句指定目标表“activity”

最佳答案

这里的人不会胡说八道。考虑一下。。。

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, type VARCHAR(12) NOT NULL
);

INSERT INTO my_table (type) VALUES
('scheduled'),('failed'),('scheduled'),('done');

UPDATE my_table x
  LEFT
  JOIN my_table y
    ON y.id < x.id
   SET x.type = 'done'
 WHERE y.id IS NULL;

SELECT * FROM my_table;
+----+-----------+
| id | type      |
+----+-----------+
|  1 | done      |
|  2 | failed    |
|  3 | scheduled |
|  4 | done      |
+----+-----------+

举个例子,这里有一些代码使用了一个子查询-尽管是不相关的。。。
UPDATE my_table x
  JOIN (SELECT MIN(id) minid FROM my_table) y
    ON y.minid = x.id
   SET x.type = 'done';

关于mysql - 更新表中的数据以设置特定日期的最小计时事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21722061/

10-14 13:57
查看更多