MySQL에서 중복된 값 쌍(duplicate value pairs)을 찾으려면 GROUP BY 절과 HAVING 절을 함께 사용하면 됩니다. 이 방법은 두 개 이상의 컬럼 조합이 동일하게 나타나는 행을 손쉽게 식별할 수 있어 데이터 정제 작업에 매우 유용합니다.
1. 예제 테이블 생성하기
먼저 실습용 테이블을 생성합니다.
mysql> create table DemoTable748 (Id int, FirstName varchar(100)); Query OK, 0 rows affected (0.46 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용하여 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable748 values(100,'John'); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable748 values(100,'Sam'); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable748 values(200,'Carol'); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable748 values(200,'Carol'); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable748 values(300,'Mike'); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable748 values(300,'Sam'); Query OK, 1 row affected (0.15 sec)
3. 전체 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable748;
실행 결과는 다음과 같습니다.
+------+-----------+ | Id | FirstName | +------+-----------+ | 100 | John | | 100 | Sam | | 200 | Carol | | 200 | Carol | | 300 | Mike | | 300 | Sam | +------+-----------+ 6 rows in set (0.00 sec)
위 결과를 보면 Id가 200이고 FirstName이 Carol인 행이 두 번 등장하는 것을 확인할 수 있습니다.
4. 중복 값 쌍을 찾는 쿼리 실행하기
다음은 MySQL에서 중복 값 쌍을 찾기 위한 쿼리입니다. Id와 FirstName을 기준으로 그룹화한 뒤, 해당 그룹의 행 수가 2개인 경우만 필터링합니다.
mysql> select Id from DemoTable748
group by Id,FirstName having count(*)=2;Id와 FirstName의 조합이 중복되는 값은 200(Carol) 하나뿐이므로, 아래와 같은 결과가 출력됩니다.
+------+ | Id | +------+ | 200 | +------+ 1 row in set (0.00 sec)
핵심 포인트 정리
중복 검사 대상 컬럼들을 GROUP BY 뒤에 나열하고, HAVING COUNT(*) > 1 또는 HAVING COUNT(*) = 2 조건을 적용하면 원하는 중복 쌍만 정확히 추출할 수 있습니다. 만약 두 번 이상 중복된 모든 경우를 찾고 싶다면 count(*)=2 대신 count(*)>1을 사용하는 것이 좋습니다.