web-dev-qa-db-ja.com

削除-ターゲットテーブルを指定できませんか?

このクエリが機能しないのはなぜですか?

DELETE FROM recent_edits 
WHERE trackid NOT IN 
     (SELECT DISTINCT history.trackid 
     FROM history JOIN recent_edits ON history.trackid=recent_edits.trackid 
     GROUP BY recent_edits.trackid)

次のメッセージが表示されます:「FROM句で更新するターゲットテーブル "recent_edits"を指定できません

36
markzzz

このようにしてみてください

DELETE FROM recent_edits 
WHERE trackid NOT IN 
     (select * from (SELECT DISTINCT history.trackid 
     FROM history JOIN recent_edits ON history.trackid=recent_edits.trackid 
     GROUP BY recent_edits.trackid) as t);
93
Nicola Cossu

削除用にロックされているテーブルを後処理することはできません。 Nicolaが述べるように、ハックselect * from (query)を使用すると、直接アクセスの代わりに一時テーブルが生成されます。

編集-ネストされており、すべてのテーブルにuniqueIDが必要になるため、使用するテーブルには必ずIDを指定してください。

20
Elysiumplain