我有一张这样的表:
表: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
的{{1}}列从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');
但这是一个错误:
ERROR 1093(HY000):您无法在FROM子句中为更新指定目标表“活动”
答案 0 :(得分:1)
由于MySQL的documented limitation,您不能对子查询FROM子句和更新目标表使用相同的表。
然后你应该做这样的事情:
DECLARE @minTime time
SELECT @minTime = MIN(time) FROM activity WHERE date='10-2-2014'
UPDATE activity
SET type='Done'
WHERE date='10-2-2014' AND type='scheduled' AND time = @minTime
答案 1 :(得分:0)
请你试试这个:
update activity
set type='Done'
where date='10-2-2014' and type='scheduled' and time in (select MIN(time) from activity where date='10-2-2014')
这对我很有帮助。 我正在使用sql server 2008
希望这会有所帮助..
答案 2 :(得分:0)
人们不会在这里谈论一些废话。请考虑以下内容......
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';