본문 바로가기
SQL

[LeetCode] Delete Duplicate Emails (delete, self join, and)

by YGSEO 2021. 4. 9.
728x90

Delete 문을 사용해서 테이블에서 행 제거

DELETE p FROM Person p INNER JOIN Person p2 ON  p.Email = p2.Email AND  p.Id > p2.Id;

 

궁금증이 생기는데

 

on 절에 조건을 줄 경우 어떤식으로 영향이 미치는가

위의 코드에서는 and라는 조건이 추가된 것이다.

 

[ON vs WHERE]

ON : JOIN 을 하기 전 필터링을 한다 (=ON 조건으로 필터링이 된 레코들간 JOIN이 이뤄진다)

WHERE : JOIN 을 한 후 필터링을 한다 (=JOIN을 한 결과에서 WHERE 조건절로 필터링이 이뤄진다)

출처: developyo.tistory.com/121


다른 풀이

With cte as (select min(Id) as Id, Email
            from Person
            group by Email)
Delete from Person
where Id not in (select Id from cte)

cte라는 가상의 테이블 생성

email group by 하고 id가 min인 것만 선택

 

where 문에서 cte로 생성된 min id 제외한 나머지 행들을 선택

delete 문으로 해당 행들을 테이블에서 제거.

728x90

댓글