Problem Solving

[LeetCode] Delete Duplicate Emails

luminous13 2022. 11. 6. 19:19

문제

중복된 이메일을 가지는 행을 삭제하는 delete 문을 작성해야 하는 문제.

중복된 이메일을 갖는 행이 있다면 id 값이 가장 작은 행만 남기고 나머지는 삭제해야 합니다.

풀이

delete와 join을 이용해서 풀 수 있습니다.

 

예를들어 person 테이블에는 다음과 같이 3개의 데이터가 있다고 가정하겠습니다.

 

person을 같은 이메일로 self join하면 다음과 같은 결과를 얻을 수 있습니다.

여기서 p1.Id > p2.Id라는 조건을 걸게 되면 다음과 같은 데이터가 남습니다.

이 데이터가 바로 삭제해야할 데이터 입니다.

다중 테이블에서는 from 앞에있는 테이블에서 일치하는 행만 삭제됩니다. 

따라서 3 | john@example.com을 삭제해야되기 때문에 delete p1을 작성하면 됩니다.

1
2
3
4
5
6
delete p1 from person p1
inner join person p2
on
    p1.email = p2.email
where
    p1.id > p2.id;
cs