MySQL # 1093 – Non è ansible specificare ‘omaggi’ nella tabella di destinazione per l’aggiornamento nella clausola FROM

Provai:

UPDATE giveaways SET winner = '1' WHERE ID = (SELECT MAX(ID) FROM giveaways) 

Ma dà:

# 1093 – Non è ansible specificare “omaggi” della tabella di destinazione per l’aggiornamento nella clausola FROM

Questo articolo sembra pertinente, ma non riesco ad adattarlo alla mia domanda. Come posso farlo funzionare?

Questo perché il tuo aggiornamento potrebbe essere ciclico … cosa succede se l’aggiornamento di quel record fa sì che accada qualcosa che ha reso FALSE condizione WHERE ? Sai che non è il caso, ma il motore no. Ci potrebbero anche essere serrature opposte sul tavolo nell’operazione.

Penserei che potresti farlo in questo modo (non verificato):

 UPDATE giveaways SET winner = '1' ORDER BY id DESC LIMIT 1 

Leggi di più

Sulla base delle informazioni contenute nell’articolo che hai collegato a questo dovrebbe funzionare:

 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); 

Sfrutta TEMP TABLE:

come segue:

 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; 

Puoi prima creare una vista della sottoquery e aggiornare / eliminare selezionando dalla vista. Ricorda semplicemente di rilasciare la vista dopo.