JOIN을 사용하여 중복 데이터 필터 소유자 변경하기

데이터베이스에서 중복된 데이터를 필터링하고, 해당 데이터의 소유자를 변경하는 작업을 수행해야 할 때가 있습니다. 이러한 상황에서 JOIN을 사용하여 중복 데이터를 필터링하고 소유자를 변경하는 방법을 알아보겠습니다.

중복 데이터 필터링하기

중복 데이터를 필터링하기 위해선 SELECT 문에 DISTINCT 키워드를 사용합니다. 예를 들어, 다음과 같은 테이블이 있다고 가정해봅시다.

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    department VARCHAR(100)
);

INSERT INTO employees (id, name, department)
VALUES (1, 'John', 'Sales'),
       (2, 'Alice', 'Marketing'),
       (3, 'John', 'Sales'),
       (4, 'Bob', 'HR'),
       (5, 'Alice', 'Marketing');

위의 테이블에서 name이 중복되는 데이터를 필터링하기 위해 SELECT DISTINCT 문을 사용할 수 있습니다.

SELECT DISTINCT name
FROM employees;

위의 쿼리를 실행하면, 중복되지 않은 name 값을 가진 레코드만 반환됩니다.

소유자 변경하기

중복 데이터를 필터링했으면, 이제 해당 데이터의 소유자를 변경해야 합니다. 데이터베이스에서는 UPDATE 문을 사용하여 레코드 업데이트를 수행합니다. 예를 들어, name이 ‘Alice’인 레코드의 department를 ‘Sales’로 변경하고 싶을 경우 다음과 같은 쿼리를 작성할 수 있습니다.

UPDATE employees
SET department = 'Sales'
WHERE name = 'Alice';

위의 쿼리를 실행하면, ‘Alice’의 소속이 ‘Marketing’에서 ‘Sales’로 변경됩니다.

JOIN을 사용하여 중복 데이터 필터링 및 소유자 변경하기

이제 JOIN을 사용하여 중복 데이터를 필터링하고 소유자를 변경하는 방법에 대해 알아보겠습니다. 예를 들어, name이 중복되는 데이터를 필터링하고 해당 데이터의 department를 ‘HR’로 변경하고 싶을 경우 다음과 같은 쿼리를 작성할 수 있습니다.

UPDATE employees
JOIN (
    SELECT name
    FROM employees
    GROUP BY name
    HAVING COUNT(*) > 1
) AS dup
ON employees.name = dup.name
SET department = 'HR';

위의 쿼리를 실행하면, name이 중복된 레코드의 department가 ‘HR’로 변경됩니다.

마무리

JOIN을 사용하여 중복 데이터를 필터링하고 소유자를 변경하는 방법을 알아보았습니다. 중복 데이터를 필터링하고 변경작업을 수행할 때 유용하게 사용할 수 있는 방법입니다. 필요한 경우, 실제 데이터베이스 스키마에 맞게 코드를 수정하여 사용하시면 됩니다.

참고 자료

#database #sql