2011-01-27 4 views
2

버전 키/값 쌍이 포함 된 mysql 테이블이 있습니다.이 (INT, 자동 증가, 기본 키) 가 키이 (VARCHAR) 이 값 (텍스트) 버전 (INT) 지정된 키에 대한 값으로데이터베이스 레코드 정리하기

가 업데이트

ID : 그것은 열이 기존 항목을 변경하는 대신 버전 번호가 증가되고 새 행이 추가됩니다. 자,이 시스템은 무거운 편집 단계를 거쳤으며 많은 쓸모없는 구버전이 있습니다.

테이블의 각 키에 대해 가장 높은 버전을 제외한 모든 SQL 스크립트를 제거하는 행운을 얻지 못했습니다. 누구에게 도움을 주셔서 감사합니다.

답변

1

가장 높은 버전의 ID가 가장 높다는 가정하에 안전하게 사용하는 것으로 가정합니다.

delete from table 
where id not in 
    (select max(id) 
    from table 
    group by key) 
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

내 스크립트가 가장 높은 버전 인 가장 높은 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