JOIN을 사용하여 중복 데이터 필터 적용하기

데이터베이스에서 중복 데이터를 필터링하는 방법은 다양하지만, JOIN을 활용하면 효과적으로 중복 데이터를 제거할 수 있습니다. 이번 포스트에서는 JOIN을 사용하여 중복 데이터를 필터링하는 방법에 대해 알아보겠습니다.

1. 중복 데이터 확인하기

먼저, 중복 데이터를 확인하기 위해 데이터베이스의 원본 테이블을 살펴봅니다. 아래는 예시로 사용할 테이블의 구조입니다.

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(100)
);
INSERT INTO users (id, name, email) VALUES
    (1, 'John Doe', 'john.doe@example.com'),
    (2, 'Jane Doe', 'jane.doe@example.com'),
    (3, 'John Smith', 'john.smith@example.com'),
    (4, 'Jane Smith', 'jane.smith@example.com'),
    (5, 'John Doe', 'john.doe@example.com'); -- 중복 데이터

위의 예시에서는 users 테이블에 중복된 nameemail 정보를 갖는 데이터가 한 건 포함되어 있습니다.

2. JOIN을 사용한 중복 데이터 필터링

중복 데이터를 필터링하기 위해선 원본 테이블과 중복된 데이터를 비교할 테이블을 JOIN하여 일치하는 값을 필터링할 수 있습니다.

다음은 중복 데이터를 필터링하는 SQL 쿼리입니다.

SELECT DISTINCT u.id, u.name, u.email
FROM users u
JOIN (
    SELECT name, email
    FROM users
    GROUP BY name, email
    HAVING COUNT(*) > 1
) d ON u.name = d.name AND u.email = d.email;

위의 쿼리에서는 users 테이블을 u로 테이블 별칭을 지정하고, 중복된 nameemail을 가지는 데이터를 필터링하기 위해 users 테이블을 nameemail로 그룹화한 서브쿼리를 d로 테이블 별칭을 지정합니다. 그리고, u.named.name, 그리고 u.emaild.email이 일치하는 값을 선택합니다.

3. 결과 확인하기

위의 SQL 쿼리를 실행하면 중복된 데이터가 필터링된 결과를 얻을 수 있습니다. 아래는 위 예시의 결과입니다.

+----+-----------+-----------------------+
| id |   name    |         email         |
+----+-----------+-----------------------+
|  1 | John Doe  | john.doe@example.com  |
|  2 | Jane Doe  | jane.doe@example.com  |
+----+-----------+-----------------------+

중복된 데이터인 John Doe는 한 건만 선택되어 결과에 포함되었습니다.

마무리

JOIN을 사용하여 중복 데이터를 필터링할 수 있습니다. 이를 통해 데이터베이스의 데이터를 정리하고 중복을 방지할 수 있습니다. JOIN 쿼리에 익숙해지고 효과적으로 중복 데이터를 제거하여 데이터의 일관성과 정확성을 유지하는 것이 중요합니다.

#database #data