Очистка записей базы данных - PullRequest
2 голосов
/ 28 января 2011

У меня есть таблица mysql, которая содержит изменяемые пары ключ / значение.Он имеет столбцы:

Id (int, автоинкремент, первичный ключ) Ключ (varchar) Значение (текст) Версия (int)

При обновлении значения для данного ключа номер версии увеличивается и добавляется новая строка вместо изменения существующей записи.Теперь эта система прошла фазу тяжелого редактирования, и есть тонны старых версий, которые для меня бесполезны.

Мне не повезло, когда я пытался создать сценарий SQL, который удалит все, кроме самой высокойВерсия для каждого ключа в таблице.Я был бы очень признателен за любую помощь.

Ответы [ 3 ]

1 голос
/ 28 января 2011

делает надежное предположение, что самая высокая версия также имеет самый высокий идентификатор.

delete from table
where id not in
    (select max(id)
    from table
    group by key)
0 голосов
/ 28 января 2011
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
0 голосов
/ 28 января 2011

Test oout этот скрипт выбора, он должен выбрать все старые версии строк.

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)

Мой сценарий не делает предположений о том, что самый высокий идентификатор является самой высокой версией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...