2010-05-20 3 views
3

그룹의 첫 번째 인스턴스를 제외하고 모두 테이블을 삭제하려고합니다. 기본적으로, 보험 데이터와 관련된 차량 데이터가있는 테이블이 있습니다. 각 정책은 power_unit 중 하나 여야합니다. 다른 모든 것은 견인 장치이어야합니다. 불행히도, 버그가 전원 장치를 복제하고 지금은 이것을 정리해야합니다. 데이터베이스에는 ~ 10k 개의 레코드가 있고 ~ 4k 개는 파워 유닛을 두 배로 늘 렸습니다.결과를 하나만 제외하고 모두 업데이트 하시겠습니까?

내 테이블의 중요한 비트입니다 (지금은 TEST1 호출) :

+------------+---------+------+-----+---------+----------------+ 
| Field  | Type | Null | Key | Default | Extra   | 
+------------+---------+------+-----+---------+----------------+ 
| id   | int(10) | NO | PRI | NULL | auto_increment | 
| policy_id | int(10) | NO |  | NULL |    | 
| power_unit | int(1) | NO |  | 0  |    | 
+------------+---------+------+-----+---------+----------------+ 

그리고 일부 샘플 데이터 :

+----+-----------+------------+ 
| id | policy_id | power_unit | 
+----+-----------+------------+ 
| 1 |   1 |   1 | 
| 2 |   1 |   1 | 
| 3 |   1 |   1 | 
| 4 |   2 |   1 | 
| 5 |   2 |   1 | 
| 6 |   2 |   1 | 
| 7 |   4 |   1 | 
| 8 |   4 |   1 | 
| 9 |   4 |   1 | 
| 10 |   5 |   1 | 
| 11 |   5 |   1 | 
| 12 |   6 |   1 | 
+----+-----------+------------+ 

은 기본적으로 내가 policy_id 1가 어디 끝내고 싶습니다 하나만 power_unit=1. policy_id 2, 3, 4 등의 경우와 동일합니다. policy_id 6의 경우 아무 것도 변경되지 않습니다 (하나의 항목 만 있고 이미 power_unit입니다).

이것이 가능한지는 잘 모르겠지만 내게는 흥미로운 문제였습니다. 그래서 사람들이 똑같을 지 모른다고 생각했습니다.

업데이트 :
난 그냥 UPDATE 그들 power_unit=0을 가지고, 행 DELETE 싶지 않아요.

답변

4
UPDATE test1 t1, 
     (
     SELECT policy, MIN(ti.id) AS mid 
     FROM test1 ti 
     GROUP BY 
       policy 
     ) tm 
SET  power_unit = 0 
WHERE t1.policy = tm.policy 
     AND t1.id <> tm.mid; 
+0

그것은 훌륭하게 작동했습니다. 고맙습니다! –

관련 문제