我有一张这样的桌子:
表: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/