web-dev-qa-db-ja.com

MySQL#1093-FROM句で更新するターゲットテーブル 'giveaways'を指定できない

私は試した:

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

しかし、それは与えます:

#1093-FROM句で更新するターゲットテーブル 'giveaways'を指定できない

この記事 は関連性があるようですが、自分のクエリに適合させることができません。どうすれば機能しますか?

26
Eray

これは、更新が周期的である可能性があるためです...そのレコードを更新すると、何かが発生してWHERE条件FALSEになった場合はどうなりますか?あなたはそれが事実ではないことを知っていますが、エンジンはそうではありません。また、操作中にテーブルに反対のロックが存在する可能性があります。

私はあなたがこのようにそれを行うことができると思います(テストされていません):

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

続きを読む

28
Matthew

これにリンクした記事の情報に基づいて動作するはずです:

update giveaways set winner='1'
where Id = (select Id from (select max(Id) as id from giveaways) as t)
38
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

最初にサブクエリのビューを作成し、代わりにビューから選択して更新/削除できます。ビューを削除することを忘れないでください。

0
Rafael

TEMP TABLEを使用します。

次のように:

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