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
