2015-06-14 77 views
0

我有這個表:如何使用更新並選擇同一個表格? MySQL的

`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:00」的每一行,並將其設置爲第一個下一個非「0000-00-00 00 :00:00「行。

因此ID#1將被設置爲2015-06-1 12:12:12

和#3,#4將被設置爲2015-06-2 13: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. 

回答

2

在MySQL中,你可以使用這個join

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以獲得你想要的值。然後join這回到您的查詢來獲取更新的信息。

+0

像往常一樣,很好的答案(在倒數第二行殺死半c) – Drew