Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在同一个表中使用更新和选择?mysql_Mysql_Sql_Database - Fatal编程技术网

如何在同一个表中使用更新和选择?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