기본 콘텐츠로 건너뛰기

[펌]mssql 중복행

SELECT   JUMIN
FROM      MEMBER
GROUP    BY JUMIN
HAVING  COUNT(*)>1

윗분이 작성하신 쿼리처럼 위 쿼리는 증복된 해당 주민번호에 대해서 가지고옵니다.

추가 질문에서 증복된 주민번호를 삭제하실것이면 모두 삭제하실것인지??

DELETE  MEMBER 
WHERE  A.P_JUMIN IN
                 (SELECT  B.P_JUMIN 
                  FROM      MEMBER b
                  GROUP BY B.P_JUMIN
                  HAVING  COUNT(*)>1
                                  )


이러한 식으로 해주시면 증복된 주민번호에 대한 모든 데이터가 삭제될것입니다.

//====================================================
테스트를 안하고 올렸더니 몇가지 에러가 발견됐네요
일단은 DELETE 시에 이명 사용이 압됩니다...
따라서 쿼리를 이용하셔야 하실듯..

DELETE  MEMBER 
WHERE  P_JUMIN IN (SELECT  B.P_JUMIN 
                                         FROM      MEMBER B
                                         GROUP    BY B.P_JUMIN                                  
                                         HAVING  COUNT(*)>1

                                          )

이렇게 해주시면 증복된 모든 쿼리에 대해서 삭제 작업이 일어납니다.

그리고 증복자의 모든 데이터를 SELECT 하는 명령어는

SELECT B.*
FROM  (SELECT  P_JUMIN
                FROM     MEMEBER
                GROUP BY P_JUMIN
                HAVING   COUNT(*)>1 ) A
LEFT JOIN  MEMEBER B ON A.P_JUMIN = B.P_JUMIN             

이렇게 해주시면 증복된 데이터에 대한 모든 정보를 보여주니다..

혹시 다른테이블에 저장하실것이면
테이블하나를 member 테이블하고 똑같이 생성하식요..
이후
INSERT INTO 생성된테이블
SELECT B.*
FROM  (SELECT  P_JUMIN
                FROM     MEMEBER
                GROUP BY P_JUMIN
                HAVING   COUNT(*)>1 ) A    
LEFT JOIN  MEMEBER B ON A.P_JUMIN = B.P_JUMIN        

위에서 A라는 증복된 P_JUMIN 컬럼만 가지오는 테이블을 하나 만들고
이테블에 기존 MEMEBER  테이블의 내용을 가지고오는것입니다.

A : B = 1 : M 

이렇게 해주시면..
새로 생성된 데이터에 증복된 데이터들이 저장됩니다..

아실지도 모르겠지만 혹시나해서 올립니다...



[출처] http://blog.naver.com/wishwon/20039941801

댓글