43

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

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」を指定できません

4

2 に答える 2

119

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

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);
于 2011-04-28T10:04:44.800 に答える
30

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

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

于 2017-01-19T22:00:08.730 に答える