it-swarm.com.de

MySQL # 1093 - Ziel-Tabelle "Giveaways" für die Aktualisierung in FROM-Klausel kann nicht angegeben werden

Ich habe es versucht:

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

Aber es gibt:

# 1093 - Die Zieltabelle 'giveaways' für die Aktualisierung in FROM-Klausel kann nicht angegeben werden

Dieser Artikel scheint relevant zu sein, aber ich kann ihn nicht an meine Anfrage anpassen. Wie kann ich es zum Laufen bringen?

26
Eray

Dies liegt daran, dass Ihr Update zyklisch sein könnte. Was passiert, wenn durch die Aktualisierung dieses Datensatzes etwas passiert, was die WHERE-Bedingung FALSE auslöste? Sie wissen, dass das nicht der Fall ist, aber der Motor nicht. Bei der Operation können sich auch andere Sperren auf dem Tisch befinden.

Ich denke, du könntest es so machen (ungeprüft):

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

Weiterlesen

28
Matthew

Basierend auf den Informationen in dem Artikel, auf den Sie verlinkt haben, sollte Folgendes funktionieren: 

update giveaways set winner='1'
where Id = (select Id from (select max(Id) as id from giveaways) as t)
37
ipr101
update giveaways set winner=1 
where Id = (select*from (select max(Id)from giveaways)as t)
13
Nicola Cossu
create table GIVEAWAYS_NEW as(select*from giveaways);

update giveaways set winner=1
where Id=(select max(Id)from GIVEAWAYS_NEW);
0
Tarun

Sie können zuerst eine Ansicht der Unterabfrage erstellen und stattdessen die Auswahl aus der Ansicht .../aktualisieren oder löschen. Denken Sie daran, die Ansicht danach zu löschen.

0
Rafael

Verwenden Sie TEMP TABLE: 

wie folgt:

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;
0
DARSHAN SHINDE