2012-03-09 2 views
0

에 나는 MySQL의 테이블과 같이 있습니다제거 중복 행은 MySQL의

id employee_number name 
    1  1    A 
    2  2    B 
    3  3    C 
    4  3    C 
    5  4    D 
    6  5    E 
    7  5    E    
    8  6    F 
    9  7    G 
    8  8    H 
    9  9    I 
    10  ....  
    11  .... 
    12  .... 
     many duplicated 
     employee_number 

내가 (3, 4, 6 또는 7 문제가되지 않는 ID) EMPLOYEE_NUMBER 3, 5의 1 개 행을 제거 할. 다음 SQL을 사용하여 복제 된 행을 볼 수 있지만 다음에 수행 할 작업이 확실하지 않습니다. 나는 누군가가이 일에 나를 도울 수 있다면 나는 apprciate. 고마워요!

SELECT COUNT(id) , employee_number 
FROM `employees` 
GROUP BY employee_number 

업데이트 :

OLD_TABLE FROM SELECT *로 NEW_TABLE 테이블 만들기 WHERE EMPLOYEE_NUMBER 1 개 그룹;

음. 이 진술을 발견하고 그것을 작동합니다. 고마워.

+2

행을 보관할 기준을 결정하는 데 필요한 사항을 제거하기 전에 데이터를 버리는 것을 기억하십시오. –

+0

이미 해결책을 찾았습니다. 업데이트를 참조하십시오. – FlyingCat

+0

당신이 답변을하는지 확인하지 않고도 모두를 상향 투표하고 있습니다. 내 게시물에 더 많은 답변을 게시해야합니다. –

답변

1
DELETE FROM `employees` 
WHERE ID 
NOT IN 
(SELECT MAX(B.ID) FROM 
        (SELECT employee_number 
        FROM `employees` 
        GROUP BY employee_number 
        HAVING COUNT(*)>1) A, 
        `employees` B 
WHERE A.employee_number=B.employee_number 
GROUP BY B.employee_number 
); 
+0

Thanks Venk. 이미 해결책을 찾았습니다. +1 – FlyingCat

+0

제 기쁨 제리 ... :) – Teja

1

U는 (오라클)과 같은 SQL을 사용할 수 쿼리는 직원 T1의 행 SELECT * 중복 곳 t1.rowid> (직원 T2)에서 분 (t2.rowid을 선택할 경우 t2.name = (T1) .name);

delete fromv employees t1 여기서 t1.rowid> (직원 t2에서 min (t2.rowid) 선택 t2.no = t1.no);

+0

고마워요 루키. 이미 해결책을 찾았습니다. +1 – FlyingCat

0

테이블을 자기 조인 할 수 있습니다.

동일한 레코드를 삭제하지 말 것을 말하십시오. 즉, (Employee.id = vtable.id가 아님)

동일한 레코드가 아니고 employee_number가 일치하면 삭제하십시오.