Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Delete - I can't specify target table?

Why this query doesn't work?

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) 

I get this message : "You can't specify target table "recent_edits" for update in FROM clause

like image 878
markzzz Avatar asked Apr 28 '11 10:04

markzzz


2 Answers

Try in this way

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); 
like image 150
Nicola Cossu Avatar answered Oct 11 '22 09:10

Nicola Cossu


You can't post-process a table which is locked for deletion. using the hack select * from (query) as Nicola states will generate a temporary table instead of direct access.

Edit - make sure that you give ID to the tables you use since it is nested and will require uniqueID for every table.

like image 32
Elysiumplain Avatar answered Oct 11 '22 10:10

Elysiumplain