본문 바로가기

TIL

[240219] SQL: 코드카타 122

[SQL 코드가타] 

196. Delete Duplicate Emails

https://leetcode.com/problems/delete-duplicate-emails/

 

1) 어떤 문제가 있었나

Delete 를 활용해 중복된 이메일 중에 id가 가장 낮은 값만 남기는 쿼리 작성

 

2) 내가 시도해본 건 무엇인가

작성한 코드가 어떻게 구현되나 중간중간 확인하고자 했으나 그 어떤  코드를 적어도 결과는 'Person' 테이블만 출력됨

결국 다른 사람 답을 통해서 사용 경험이 없는 delete는 어떻게 활용해야 하는지 확인함 

 

3) 어떻게 해결했나

delete p1 
from Person p1
join Person p2 on p1.email = p2.email and p1.id > p2.id;

 

4) 무엇을 새롭게 알았나

- 금번 문제에서 join 절에 조건을 넣은 경우, 조건이 적용된 형태로 결과가 출력되는 것이 아니라 조건이 걸린 원본 table 값만 출력

- 즉, 삭제할 칼럼 조건을 join에 넣되, delect에는 최종적으로 출력을 원하는 테이블명 p1을 기재 필요 

 

하기 답풀이 참조

Input:
Person table:
+----+------------------+
| id | email |
+----+------------------+
| 1 | john@example.com |
| 2 | bob@example.com |
| 3 | john@example.com |
+----+------------------+

=> From Person p1, Person p2 : it would look like:
1|john@example.com|1|john@example.com
1|john@example.com|2|bob@example.com
1|john@example.com|3|john@example.com

2|bob@example.com|1|john@example.com
2|bob@example.com|2|bob@example.com
2|bob@example.com|3|john@example.com

3|john@example.com|1|john@example.com
3|john@example.com|2|bob@example.com
3|john@example.com|3|john@example.com

=> From Person p1, Person p2 where p1.email=p2.email and p1.id>p2.id: It would look like:
3|john@example.com|1|john@example.com

Now delete this row's matching row in p1 using p1: delete p1