Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL JOIN을 활용해 테이블 내 중복 값을 찾는 방법

개요

MySQL에서 두 개 이상의 행이 같은 값을 가지고 있는지 확인하려면 SELF JOIN(자기 조인) 기법을 활용하면 됩니다. 이 글에서는 실제 예제를 통해 JOIN 쿼리로 특정 컬럼의 중복 값을 찾아내는 방법을 알아보겠습니다.

예제 데이터 준비

먼저 아래와 같은 stock_item 테이블이 있다고 가정해 보겠습니다. 이 테이블의 quantity 컬럼에는 중복 값이 존재합니다. 즉, 'Notebooks'와 'Pencil'은 수량 40으로, 그리고 'Shirts', 'Shoes', 'Trousers'는 수량 29로 값이 겹쳐 있습니다.

mysql> Select * from stock_item;
+------------+----------+
| item_name  |quantity  |
+------------+----------+
| Calculator |        89 |
| Notebooks  |        40 |
| Pencil     |        40 |
| Pens       |        32 |
| Shirts     |        29 |
| Shoes      |        29 |
| Trousers   |        29 |
+------------+----------+
7 rows in set (0.00 sec)

JOIN을 이용한 중복 값 조회 쿼리

아래 쿼리는 stock_item 테이블을 자기 자신과 INNER JOIN하여 quantity 값이 서로 같으면서, item_name은 다른 행들을 찾아냅니다.

mysql> Select distinct g.item_name,g.quantity from stock_item g
    -> INNER JOIN Stock_item b ON g.quantity = b.quantity
    -> WHERE g.item_name<>b.item_name;
+-----------+----------+
| item_name | quantity |
+-----------+----------+
| Pencil    |        40 |
| Notebooks |        40 |
| Shoes     |        29 |
| Trousers  |        29 |
| Shirts    |        29 |
+-----------+----------+
5 rows in set (0.00 sec)

쿼리 동작 원리

위 쿼리가 중복 값을 찾아낼 수 있는 이유는 다음과 같습니다.

1. SELF JOIN: 동일한 테이블에 별칭(alias) gb를 부여해 마치 두 개의 다른 테이블처럼 조인합니다.

2. 조인 조건: ON g.quantity = b.quantity 조건으로 수량이 같은 행들끼리 매칭시킵니다.

3. 중복 판별 조건: WHERE g.item_name <> b.item_name 절을 통해 항목 이름이 서로 다른 경우만 남깁니다. 이름이 같다면 자기 자신과 매칭된 결과이므로 제외하는 것입니다.

4. DISTINCT: 조인 과정에서 발생할 수 있는 중복된 결과 행을 제거하여 깔끔한 목록을 반환합니다.

마무리

이처럼 SELF JOIN과 조건절을 조합하면 별도의 GROUP BY나 HAVING 절 없이도 간단하게 중복 데이터를 식별할 수 있습니다. 데이터 정합성 검사나 중복 레코드 정리 작업 시 유용하게 활용할 수 있는 방법입니다.