1) Write an SQL query to delete all the duplicate emails, keeping only one unique email with the smallest id.
2) Note that you are supposed to write a DELETE statement and not a SELECT one.

DELETE 구문 사용GROUP BY 사용SELECT email, MIN(id)
FROM person
GROUP BY email
MIN(id)값만 출력하기 위해 FROM절 서브쿼리 활용SELECT s.min_id
FROM ( SELECT email, MIN(id) min_id
FROM person
GROUP BY email ) s
📌 HackerRank > Ollivander's Inventory 에서 했던 같은 실수
DELETE FROM 사용WHERE 컬럼명 NOT IN 조건 사용DELETE FROM person
WHERE id NOT IN ( SELECT s.min_id
FROM ( SELECT email, MIN(id) min_id
FROM person
GROUP BY email ) s )
🔍 JOIN 되어있는 테이블에서 관련 데이터 모두 삭제하고 싶을 때
t1
| id |
|---|
| |
| 2 |
| 3 |
t2
| id | ref |
|---|---|
| | |
| B | 2 |
| C | 3 |
DELETE t1, t2
FROM t1
INNER JOIN t2 ON t1.id = t2.ref
WHERE t1.id = 1;
DELETE p1
FROM person p1
INNER JOIN person p2 ON p1.email = p2.email
WHERE p1.id > p2.id
풀이1.
DELETE FROM person
WHERE id NOT IN ( SELECT s.min_id
FROM ( SELECT email, MIN(id) min_id
FROM person
GROUP BY email ) s )
풀이2.
DELETE p1
FROM person p1
INNER JOIN person p2 ON p1.email = p2.email
WHERE p1.id > p2.id