mysql - safety - you can t specify target table clientes for update in from clause
MySQL#1093-No se puede especificar la tabla de objetivos ''regalos'' para la actualización en la cláusula FROM (6)
Esto se debe a que su actualización podría ser cíclica ... ¿Qué ocurre si la actualización de ese registro hace que ocurra algo que hace que la condición WHERE
FALSE
? Sabes que no es el caso, pero el motor no. También podría haber bloqueos opuestos sobre la mesa en la operación.
Pensaría que podrías hacerlo así (no probado):
UPDATE
giveaways
SET
winner = ''1''
ORDER BY
id DESC
LIMIT 1
Lo intenté:
UPDATE giveaways SET winner = ''1'' WHERE ID = (SELECT MAX(ID) FROM giveaways)
Pero da:
# 1093 - No puede especificar los ''regalos'' de la tabla de objetivos para la actualización en la cláusula
FROM
Este artículo parece relevante pero no puedo adaptarlo a mi consulta. ¿Cómo puedo hacer que funcione?
Haga uso de la TABLA TEMP:
como sigue:
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;
Primero puede crear una vista de la subconsulta y actualizar / eliminar la selección de la vista. Solo recuerde dejar caer la vista después.
Según la información del artículo que vinculó a esto debería funcionar:
update giveaways set winner=''1''
where Id = (select Id from (select max(Id) as 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);
update giveaways set winner=1
where Id = (select*from (select max(Id)from giveaways)as t)