2012-07-30 121 views
0

我想更新最後生成的行(max(id)排「其中」子句的表MySQL的:更新具有與最大值

我想這個代碼,但它不工作

update person t1 
set t1.age = 25 
where t1.id = (select max(t2.id) from person t2 
      where t2.address = 'LA, California'); 

MySQL的告訴我說:Error Code: 1093. You can't specify target table 't1' for update in FROM clause

所以,我想,我不能在執行操作如更新達到同樣的故事

如何℃。我唯一的這個問題?

問候。

回答

1

你可以爲嘗試:

UPDATE person t1 
    INNER JOIN (SELECT MAX(id) AS id FROM person 
      WHERE t2.address = 'LA, California') t2 
     ON t1.id = t2.id 
SET t1.age = 25; 

SELECT MAX(t2.id) 
INTO @var_max_id 
FROM person t2 
WHERE t2.address = 'LA, California'; 

UPDATE person t1 
SET t1.age = 25 
WHERE t1.id = IFNULL(@var_max_id, -1); 
2

不能引用同一個表中的子查詢,但可以改爲做一個JOIN(在UPDATEDELETE聲明允許):

UPDATE person a 
JOIN (SELECT MAX(id) AS id FROM person WHERE address = 'LA, California') b 
     ON a.id = b.id 
SET a.age = 25 

另一種方式,你可以做到這一點是通過使用在ORDER BY/LIMIT技術:

UPDATE person 
SET  age = 25 
WHERE address = 'LA, California' 
ORDER BY id DESC 
LIMIT 1 
+0

您推薦只是簡化我查詢了這麼多的限制1方法。非常好的主意。 – 2014-02-21 19:45:15