0

最後に生成された行 ( max(id)row.

このコードを試しましたが、うまくいきません

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

なので、更新などの操作を行っているうちに同じ話にたどり着けないのではないかと思います。

どうすればこの問題を解決できますか?

よろしく。

4

2 に答える 2

2

次のように試すことができます:

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);
于 2012-07-30T10:14:24.180 に答える
2

サブクエリで同じテーブルを参照することはできませんが、代わりに JOIN で参照できます (これはUPDATEandDELETEステートメントで許可されています)。

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
于 2012-07-30T10:12:52.007 に答える