2012-06-25 5 views
1

나는제거 중복 레코드 만

------------ 
id name 
------------ 
1 master 
2 datagrid 
3 zewa 
4 leumas 
5 delta 
6 master 
7 master 
8 master 
9 delta 

난 그냥 중복 (반복) 행을 제거하려는 다음 표를 가지고있다. 따라서 위 표에서 "master"및 "delta"에 대한 모든 행을 제거해야합니다.

참고 : 임시 테이블이나 모든 Alter 문을 사용하고 싶지 않습니다. 난 그냥 삭제 쿼리를 사용하고 싶습니다

+1

** all ** "master"및 "delta"행을 삭제해야합니까? 하나만 빼고는 아닌가? –

+0

아니요, 단일 레코드가 존재하지 않아야합니다. 반복되는 행을 모두 제거해야합니다. – neeraj

답변

8

IIRC MySQL은 IN 절에서 변이 테이블을 참조 할 수 없도록합니다. 단, 간접 참조 계층을 추가해야합니다. 여기서 이름 테이블

DELETE FROM YourTable 
WHERE name IN (SELECT name 
       FROM (SELECT name 
         FROM YourTable 
         GROUP BY name 
         HAVING COUNT(name) > 1) AS T) 
+1

+1 내 (삭제 된) 답변이 작동하지 않는 이유는 무엇입니까? !!!! – ManseUK

+0

Thx 답장 Martin ... – neeraj

+0

@ 마틴 마스터 스트로크 – 1Mayur

-2

삭제 (이름을 갖는 계수 (이름 테이블 그룹의 이름을 선택)> 1);

+0

이 작동하지 않습니다 ... 당신은 하위 쿼리에서 돌연변이 테이블에 대한 참조를 사용할 수 없습니다 .... – ManseUK