清理数据库记录

时间:2011-01-27 22:55:12

标签: sql mysql database

我有一个mysql表,其中包含可版本化的键/值对。它有列:

ID (int,自动增量,主键)(varchar)(文本)版本( INT)

随着给定键的值的更新,版本号会递增并添加新行,而不是更改现有条目。现在,这个系统已经经历了一个繁重的编辑阶段,并且有大量旧版本对我来说毫无用处。

我没有任何运气试图构建一个SQL脚本,除了表中每个键的最高版本之外。 我非常感谢任何人的帮助。

3 个答案:

答案 0 :(得分:1)

有希望安全地假设最高版本也具有最高ID。

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

答案 1 :(得分:0)

测试这个选择脚本,它应该选择所有旧版本的行。

SELECT * FROM table o where id in (SELECT i.* FROM table i WHERE i.Version<>MAX(i.Version) and i.ID=o.ID )

如果有效,那么只需将“SELECT *”替换为“DELETE”即可。在删除任何内容之前,请确保备份该表。

http://www.cyberdesignworks.com.au/news-blog/web-developers-MySQL-Quick-Tips (参见通过SQL复制表)

我的脚本没有假设最高ID是最高版本。

答案 2 :(得分:0)

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

不确定,但应该工作! :)首先尝试选择如下:

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
相关问题