J'essaie de mettre à jour des champs dans ma base de données, mais je suis coincé avec un problème aussi simple: je veux mettre à jour une seule ligne de la table avec le plus grand numéro d'identification. Je ferais quelque chose comme ça:
UPDATE table SET name='test_name' WHERE id = max(id)
Malheureusement, cela ne fonctionne pas. Des idées?
id | name
---|------
1 | ghost
2 | fox
3 | ghost
Je souhaite mettre à jour uniquement la dernière ligne car le numéro d'identification est le plus important.
L'utilisation de MAX()
n'est pas possible à cette position. Mais vous pouvez faire ceci:
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)
Cette requête renvoie une erreur car vous ne pouvez pas créer de sous-requête SELECT à partir de la même table que vous mettez à jour.
Essayez d'utiliser ceci:
UPDATE table SET name='test_name' WHERE id = (
SELECT uid FROM (
SELECT MAX(id) FROM table AS t
) AS tmp
)
Cela crée une table temporaire, ce qui permet d'utiliser la même table pour UPDATE et SELECT, mais au détriment des performances.
Je pense que la méthode d'iblue est probablement votre meilleur choix. mais une autre solution pourrait être de définir le résultat en tant que variable, puis d'utiliser cette variable dans votre instruction UPDATE.
SET @max = (SELECT max(`id`) FROM `table`);
UPDATE `table` SET `name` = "FOO" WHERE `id` = @max;
Cela pourrait s'avérer utile si vous envisagez d'exécuter plusieurs requêtes avec le même ID, mais ce n'est pas vraiment idéal d'exécuter deux requêtes si vous effectuez une seule opération de mise à jour.
UPDATE table_NAME
SET COLUMN_NAME='COLUMN_VALUE'
ORDER BY ID
DESC LIMIT 1;
Parce que vous ne pouvez pas utiliser SELECT IN DELETE OR UPDATE CLAUSE.ORDER BY ID DESC LIMIT 1
. Cela vous donne des identifiants ayant la valeur maximale MAX(ID)
comme vous avez essayé de le faire. Mais MAX(ID)
ne fonctionnera pas.
Ancienne question, mais pour tous ceux qui y croiseront, vous pourrez peut-être le faire:
UPDATE
`table_name` a
JOIN (SELECT MAX(`id`) AS `maxid` FROM `table_name`) b ON (b.`maxid` = a.`id`)
SET a.`name` = 'test_name';
Nous pouvons mettre à jour l’enregistrement en utilisant max () function et peut-être que cela vous aidera.
UPDATE MainTable
SET [Date] = GETDATE()
where [ID] = (SELECT MAX([ID]) FROM MainTable)
Cela fonctionnera le parfait pour moi.