Contents
내가 작성한 쿼리
중복된 이메일을 모두 삭제할 수 있는 솔루션을 작성하고, 가장 작은 ID를 가진 유일한 이메일 하나만 보관하세요. SQL 사용자의 경우 SELECT 문이 아닌 DELETE 문을 작성해야 한다는 점에 유의하세요. 스크립트를 실행한 후 표시되는 답은 사용자 테이블입니다. 드라이버가 먼저 코드를 컴파일하고 실행한 다음 사용자 테이블을 표시합니다. 사용자 테이블의 최종 순서는 중요하지 않습니다.
내가 작성한 쿼리
Oracle
DELETE FROM Person
WHERE id NOT IN (
SELECT MIN(id)
FROM Person
GROUP BY email
);
MySQL
DELETE P1
FROM Person P1
JOIN Person P2
ON P1.email = P2.email AND P1.id > P2.id; -- 중복의 경우 둘 중에 id가 큰 것 지우기
차이점
- JOIN을 통한 DELETE 문법
MySQL
:DELETE A FROM A JOIN B
처럼JOIN
사용 가능Oracle
:DELETE JOIN
불가능 → 서브쿼리 또는ROWID
방식 사용 필요ROWID
방식이란?- Oracle은 각 행에 고유한 ROWID 값을 가짐
ROWID
는 행의 물리적 저장 위치를 나타냄- 중복 데이터 중 하나만 남기고 지울 때,
ROWID
를 활용하면 깔끔하게 처리 가능
- 중복 조건 처리 방식
MySQL
:P1.email = P2.email AND P1.id > P2.id
로 비교하며 삭제Oracle
:GROUP BY email
후MIN(id)
만 남기고 나머지 삭제
- 삭제 조건 위치
MySQL
:JOIN
내 조건에서 중복 및 삭제 대상 지정Oracle
:WHERE id NOT IN (SELECT MIN(id) ...)
형태로 필터링
Share article