728x90

1. 중복된 갯수가 n 개 이상인

SELECT 필드명, count(*) as 변수명 FROM 테이블명 GROUP BY 필드명 HAVING 변수명 > n;

또는

SELECT 필드명, count(*)  FROM 테이블명 GROUP BY 필드명 HAVING count(*) > n;


// 중복된 값을 찾고자 하는 필드명을 지정한다. 

// 가령 mp3rand 라고 지정하면 GROUP BY mp3rand


칼럼에 INDEX 를 걸기 전과 건 후의 속도 차이를 보면 엄청난 차이가 발생한 걸 알 수 있다.


2. 중복된 데이터 추출

SELECT column1, column2, column3, ...

FROM tableA

WHERE column1 IN (

SELECT column1

FROM tableA

GROUP BY column1

HAVING COUNT(*) > 1

);


로 하면 중복된 게시물을 보여준다.

select a.uid, a.no, a.eng from data a, (select eng from data group by eng having count(*) > 1) b where a.eng = b.eng;
select uid, no, eng from data where eng IN (select eng from data group by eng having count(*) > 1) order by eng;


이 두개는 동일한 결과를 화면에 뿌려준다.

하지만 Query 속도는 JOIN 으로 가져온 첫번째 방법이 훨씬 더 빠르다.


동명이인 자료 추출

select m.* from member m, (select userNM from member group by userNM having count(*) > 1) b where m.userNM=b.userNM;


그런데 가져올 기존 테이블명을 손대지 않고 처리를 하려면 별칭으로 이름을 변경해주면 중복이 발생하지 않기 때문에 자료를 조회하는데 문제가 생기지 않는다.

select * from member , (select userNM as userNM1 from member group by userNM having count(*) > 1) b where member.userNM=b.userNM1;


3. 중복된 것 모두 찾기

SELECT 필드명, count(*) FROM 테이블명 GROUP BY 필드명


영문, 한글자까지 문자의 정확한 길이를 알려면 CHAR_LENGTH() 함수를 사용한다.

SELECT eng, CHAR_LENGTH(eng) FROM data WHERE uid =번호;


4. 중복데이터 제거 WHERE절 대신 HAVING절을 이용하여 해결
DELETE FROM TABLE WHERE id IN (
SELECT A.id id FROM ( SELECT id FROM TABLE
            GROUP BY col2, col3, col4, col5, col6
                 HAVING COUNT(*)  >  1)  A)

블로그 이미지

Link2Me

,