2011-01-05 21 views
5

我試圖刪除所有不是其名下的最新版本的記錄,但顯然你不能引用訪問你在同一個查詢中修改的表。在DELETE查詢中繞過自我反思

我試過,但它並沒有對上述原因的工作:

DELETE FROM table 
WHERE CONCAT(name, version) NOT IN (
SELECT CONCAT(name, MAX(version)) 
FROM table 
GROUP name 
) 

我怎樣才能解決這個得到什麼?

乾杯

回答

7

Wrap the inner reference in a derived table

DELETE FROM table 
WHERE Concat(name, version) NOT IN (SELECT nv 
            FROM (SELECT Concat(name, Max(version)) 
                AS nv 
              FROM table 
              GROUP BY name) AS derived) 
+1

謝謝,我卻看到了那個鏈接,並較早嘗試過這種方法,但我一定是什麼地方留下了放錯位置的支架。 – DonutReply 2011-01-05 17:22:19

+0

只是注意到和編輯 – DonutReply 2011-01-05 17:24:33

1
delete t1 
from table_name1 t1, table_name1 t2 
where t1.version < t2.version 
and t1.name = t2.name; 

//創建別名是需要在這裏