我有一個包含可版本化鍵/值對的mysql表。它具有列:清理數據庫記錄
標識(INT,自動增量,主鍵)重點(VARCHAR)值(文本)版本(INT)
對於一個給定鍵的值更新,版本號會增加,並添加新行,而不是更改現有條目。現在,這個系統經歷了一個繁重的編輯階段,並且有很多舊版本對我來說毫無用處。
我還沒有嘗試構建一個SQL腳本,它將除去表中每個鍵的最高版本以外的所有內容。 我非常感謝任何人的幫助。
我有一個包含可版本化鍵/值對的mysql表。它具有列:清理數據庫記錄
標識(INT,自動增量,主鍵)重點(VARCHAR)值(文本)版本(INT)
對於一個給定鍵的值更新,版本號會增加,並添加新行,而不是更改現有條目。現在,這個系統經歷了一個繁重的編輯階段,並且有很多舊版本對我來說毫無用處。
我還沒有嘗試構建一個SQL腳本,它將除去表中每個鍵的最高版本以外的所有內容。 我非常感謝任何人的幫助。
做出了一個充滿希望的安全假設,即最高版本也具有最高的ID。
delete from table
where id not in
(select max(id)
from table
group by key)
測試此選擇腳本時,應選擇所有行的舊版本。
SELECT * FROM table o where id in (SELECT i.* FROM table i WHERE i.Version<>MAX(i.Version) and i.ID=o.ID)
如果有效,那麼這只是用「刪除」替換「SELECT *」的問題。請確保在刪除任何內容之前備份表格。
http://www.cyberdesignworks.com.au/news-blog/web-developers-MySQL-Quick-Tips (參見通過SQL複製表)
我的腳本不進行關於最高的ID是最高版本的假設。
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