2011-01-05 9 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

+0

ちょうどそれが気付き編集されました – DonutReply

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

//ここで必要

関連する問題