私は自分のDBのフィールドを更新しようとしていますが、そのような単純な問題に悩まされています。最大のID番号を持つテーブルの1つの行だけを更新したいのです。私はそのようなことをします:
UPDATE table SET name='test_name' WHERE id = max(id)
残念ながら動作しません。何か案は?
id | name
---|------
1 | ghost
2 | fox
3 | ghost
ID番号が一番大きいので最後の行だけを更新したい。
この位置ではMAX()
を使用できません。しかし、これを行うことができます:
UPDATE table SET name='test_name' ORDER BY id DESC LIMIT 1;
UPDATE table SET name='test_name' WHERE id = (SELECT max(id) FROM table)
更新している同じテーブルからSELECTサブクエリを実行できないため、このクエリはエラーを返します。
これを使ってみてください:
UPDATE table SET name='test_name' WHERE id = (
SELECT uid FROM (
SELECT MAX(id) FROM table AS t
) AS tmp
)
これにより一時テーブルが作成され、UPDATEとSELECTに同じテーブルを使用できますが、パフォーマンスは低下します。
Iblueの方法がおそらく最善の策だと思います。しかし、別の解決策は、結果を変数として設定し、その変数をUPDATEステートメントで使用することです。
SET @max = (SELECT max(`id`) FROM `table`);
UPDATE `table` SET `name` = "FOO" WHERE `id` = @max;
これは、同じIDで複数のクエリを実行することを期待している場合に便利ですが、更新操作を1つだけ実行している場合に2つのクエリを実行するのはあまり理想的ではありません。
_UPDATE table_NAME
SET COLUMN_NAME='COLUMN_VALUE'
ORDER BY ID
DESC LIMIT 1;
_
_SELECT IN DELETE OR UPDATE CLAUSE.ORDER BY ID DESC LIMIT 1
_を使用できないため。これは、あなたがやろうとしたような最大値MAX(ID)
を持つIDを与えます。ただし、MAX(ID)
は機能しません。
古い質問ですが、これに遭遇した人にとってはこれを行うこともできます:
UPDATE
`table_name` a
JOIN (SELECT MAX(`id`) AS `maxid` FROM `table_name`) b ON (b.`maxid` = a.`id`)
SET a.`name` = 'test_name';
max()関数を使用してレコードを更新できます。おそらくそれが役立つでしょう。
UPDATE MainTable
SET [Date] = GETDATE()
where [ID] = (SELECT MAX([ID]) FROM MainTable)
perfectが機能します。