J'ai essayé:
UPDATE giveaways SET winner = '1' WHERE ID = (SELECT MAX(ID) FROM giveaways)
Mais cela donne:
# 1093 - Vous ne pouvez pas spécifier de "cadeaux" pour la mise à jour dans la clause
FROM
Cet article semble pertinent mais je ne peux pas l'adapter à ma requête. Comment puis-je le faire fonctionner?
Ceci est dû au fait que votre mise à jour peut être cyclique ... et si la mise à jour de cet enregistrement entraîne un événement qui a rendu la condition WHERE
_____ FALSE
? Vous savez que ce n'est pas le cas, mais pas le moteur. Il pourrait également y avoir des serrures opposées sur la table lors de l'opération.
Je pense que vous pourriez le faire comme ceci (non testé):
UPDATE
giveaways
SET
winner = '1'
ORDER BY
id DESC
LIMIT 1
Selon les informations contenues dans l'article que vous avez lié à cela devrait fonctionner:
update giveaways set winner='1'
where Id = (select Id from (select max(Id) as id from giveaways) as t)
update giveaways set winner=1
where Id = (select*from (select max(Id)from giveaways)as t)
create table GIVEAWAYS_NEW as(select*from giveaways);
update giveaways set winner=1
where Id=(select max(Id)from GIVEAWAYS_NEW);
Vous pouvez d'abord créer une vue de la sous-requête et mettre à jour/supprimer la sélection dans la vue à la place de ..
Faire usage de TEMP TABLE:
comme suit:
UPDATE TABLE_NAME SET TABLE_NAME.IsActive=TRUE
WHERE TABLE_NAME.Id IN (
SELECT Id
FROM TEMPDATA
);
CREATE TEMPORARY TABLE TEMPDATA
SELECT MAX(TABLE_NAME.Id) as Id
FROM TABLE_NAME
GROUP BY TABLE_NAME.IncidentId;
SELECT * FROM TEMPDATA;
DROP TABLE TEMPDATA;