如何在同一个表中使用更新和选择?mysql
我有这张桌子:如何在同一个表中使用更新和选择?mysql,mysql,sql,database,Mysql,Sql,Database,我有这张桌子: `id` `activity_time` 1 0000-00-00 00:00:00 2 2015-06-1 12:12:12 3 0000-00-00 00:00:00 4 0000-00-00 00:00:00 5 2015-06-2 13:13:13 我想用日期0000-00-00:00:00更新每一行,并将其设置为下一个非0000-00-00:00:00行的第一行 因此,id 1将设置为2015-06-112:12:12
`id` `activity_time`
1 0000-00-00 00:00:00
2 2015-06-1 12:12:12
3 0000-00-00 00:00:00
4 0000-00-00 00:00:00
5 2015-06-2 13:13:13
我想用日期0000-00-00:00:00更新每一行,并将其设置为下一个非0000-00-00:00:00行的第一行
因此,id 1将设置为2015-06-112:12:12
3、4将设置为2015-06-213:13:13
我正在尝试运行此查询:
UPDATE
table1
SET activity_time =
(
SELECT activity_time FROM table1 as t2
where
t2.activity_time != '0000-00-00 00:00:00'
AND
t2.id > table1.id
ORDER BY Id ASC
limit 1
)
WHERE activity_time = '0000-00-00 00:00:00'
但我有一个错误:
You can't specify target table 'table1' for update in FROM clause.
在MySQL中,您可以使用连接实现以下目的:
UPDATE table1 t1 JOIN
(SELECT t1.*,
(SELECT t1b.activity_time
FROM table1 t1b
WHERE t1b.activity_time <> '0000-00-00 00:00:00' AND
t1b.id > t1.id
ORDER BY t1b.id ASC
LIMIT 1
) as next_activity_time
FROM table1 t1a
WHERE t1a.activity_time <> '0000-00-00 00:00:00'
) tnxt
ON tnxt.id = t1.id
SET t1.activity_time = tnxt.next_activity_time
WHERE t1.activity_time = '0000-00-00 00:00:00';
基本思想是将查询重写为SELECT,以获取所需的值。然后将此链接返回到您的查询中,以获取更新信息。像往常一样,在第二行到最后一行中找到很棒的答案kill semi-c