我有一个mysql表,其中包含可版本化的键/值对。它有列:
ID (int,自动增量,主键)键(varchar)值(文本)版本( INT)
随着给定键的值的更新,版本号会递增并添加新行,而不是更改现有条目。现在,这个系统已经经历了一个繁重的编辑阶段,并且有大量旧版本对我来说毫无用处。
我没有任何运气试图构建一个SQL脚本,除了表中每个键的最高版本之外。 我非常感谢任何人的帮助。
答案 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