2011-04-28 32 views
21

爲什麼這個查詢不起作用?以這種方式刪除 - 我無法指定目標表?

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); 

回答

62

嘗試:

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) 

我得到這個消息一個表被鎖定刪除使用黑客select * from (query)作爲尼古拉國家將生成一個臨時表而不是直接訪問

編輯 - 確保你給你的表ID因爲它是嵌套的,並且每個表都需要uniqueID。

+1

這個訣竅是奧古斯托告訴你的。 Ciao;) – 2011-04-28 10:40:34

+0

@Augusto:很高興你覺得它很有用。你的回答也是對的。 :) – 2011-04-28 11:50:24

+1

@Augusto,另見http://stackoverflow.com/a/8333417/632951 – Pacerier 2015-02-24 03:35:03

6

你不能後處理「不能指定目標表 「recent_edits」 FOR UPDATE FROM子句