2011-01-27 4 views
2

私は、バージョン対応のキーと値のペアを含むmysqlテーブルを持っています。指定されたキーの値が更新されるとデータベースレコードのクリーンアップ

Idを(int型、自動インクリメント、主キー)キー(varchar型)バリュー(テキスト)バージョン(int型)

:それは列があります、既存のエントリを変更するのではなく、バージョン番号が増分され、新しい行が追加されます。さて、このシステムは編集作業が煩雑になり、古いバージョンのものがたくさんあり、私には役に立たないものです。

私は、テーブル内の各キーの最も高いバージョン以外のすべてを削除するSQLスクリプトを作成しようとしていません。 私は誰の助けにも大変感謝しています。

答えて

1

最高のバージョンも最高のIDを持つことを、安全に前提としています。

delete from table 
where id not in 
    (select max(id) 
    from table 
    group by key) 
0

この選択スクリプトでは、すべての古いバージョンの行を選択する必要があります。

これが機能する場合は、「SELECT *」を「DELETE」に置き換えるだけです。削除する前に必ずテーブルをバックアップしてください。

http://www.cyberdesignworks.com.au/news-blog/web-developers-MySQL-Quick-Tips

私のスクリプトは最上位バージョンであること、最高のid想定していません(SQLによるコピーの表を参照してください)。

0
delete * from yourtable where id not in (select id from yourtable x where version=(select max(version) from yourtable where id=x.id)) 

shureが動作するはずです。 :)

は、このような選択を最初に試してみてください。

select * from yourtable where id not in (select id from yourtable x where version=(select max(version) from yourtable where id=x.id)) limit 500 
関連する問題