2012-07-30 76 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