2010-01-06 8 views
1

테이블 이름이 A 인 것을 고려하십시오.이 테이블에는 mark라는 이름의 열이 하나만 있습니다. 중복 된 값이 있습니다. 임시 테이블없이 중복 값을 삭제하려면 어떻게해야합니까? 테이블에 중복 된 값 중 하나가 있어야합니다.테이블의 중복 레코드 삭제

+0

유래에 중복 quetions 삭제 : http://www.google.com/search?q=duplicate+records+site:stackoverflow.com –

+0

http://stackoverflow.com/questions/1585412/sql- 테이블에서 중복 레코드 삭제 –

+0

Susan, Vinko가 제공 한 링크를 클릭하면 이전 비슷한 SO 질문에서 대답을 찾을 수 있습니다. – DOK

답변

0

두 개의 레코드가 테이블에있는 경우 고유 한 항목을 식별하여 해당 항목 만 삭제할 수 있는지 확신 할 수 없습니다. 당신이 할 수있는 것은 :

  • 가 모두 삭제 한 다음 아마 커서를 사용하거나 구조를 반복 한 다시 추가 할 수 있습니다.
  • 다른 테이블과 그룹을 선택하여 중복되지 않도록 한 다음 원본에서 모든 행을 삭제하고 복사하십시오.
  • 호출이 테이블에 ID 열을 추가 한 다음 채울 :() 이름으로 그룹) MAX (ID를 선택합니다 (NOT IN ID 을 를)

    을 에서 삭제

하고 나중에 INNER FROM

+0

안녕 그냥 테이블에 하나의 열이 있다는 질문을 참조하십시오 – susanthosh

+0

나는 그것을 이해합니다. 내 제안은 열이 아닌 테이블 내의 레코드 (행)와 관련이 있습니다. – bobwah

1

SELECT * 가 B 같이 가입이 열을 제거 할 수 있습니다 WHERE A.marks = B.marks;

중복 된 값을 표시합니다 (실수하지 않은 경우). 그러면 삭제를 위해 JOIN을 수행 할 수 있습니까?

편집 : 시도해 보았습니다. 작동하지 않습니다. 테이블에 ID 열이 없습니까? 좋아 : 당신이 당신의 테이블에있는 키 그래서 당신의 행의 고유하게 정의하지 않았기 때문에 중복 susantosh 삭제 그렇게 어려운 이유

SELECT * 
FROM A INNER JOIN A as B ON A.marks = B.marks 
WHERE A.id != B.id; 
0

이유는? 테이블 디자인에 관한 기본 서적을 골라야하고 독창성이 없으면 아무 것도 알아낼 수 없다는 것을 정신 나갈 수 있다는 것을 깨달을 필요가 있습니다.

몇 가지 당신이 할 수 있습니다 : 특정 마크 BY

  1. SELECT DISTINCT marks FROM TableName INTO NewTableName
  2. 그룹은 다른 테이블로 이동 한 후 고유 ID 열을 추가 이전 테이블을
  3. 을 삭제 (어쩌면의 int 유형) 중복 코드를 없애기 위해 코드를 작성하십시오.

이들은 옵션 중 일부일 뿐이지 만 테이블 디자인의 기초를 이해하지 못하면 t 반복해서 그의 문제.

+0

중요한 점은 임시 테이블을 사용해서는 안된다는 것입니다. – susanthosh

0
WITH q AS 
     (
     SELECT *, ROW_NUMBER() OVER (PARTITION BY marks ORDER BY marks) AS rn 
     FROM a 
     ) 
DELETE 
FROM q 
WHERE rn > 1