728x90
Person 테이블에 중복된 이메일을 삭제하여 결과를 반환하도록 SQL을 작성하는 문제이다.
※단, SELECT를 사용하지 않고 결과를 반환해야한다.
문제를 처음 보는 순간 select를 사용하여 이메일 기준으로 group by 한다음 해당 그룹에 이메일 갯수가 1개 이상이면 중복된 이메일이 있다는 것을 알 수 있다. (이 답도 제출이 되네...)
delete from Person
where id not in (
select min(p.Id)
from (select * from Person) p
group by p.email
);
이를 해결하기 위해 Person을 Join 하거나 Cartesian Product를 통해 조건을 설정해주면 된다.
delete p1 from Person p1, Person p2 where p1.email = p2.email and p1.id > p2.id
delete 사이에 p1이 있는데 이를 작성해주지 않으면 어떤 테이블에서 삭제하는지 알수 없다.
반응형
'데이터베이스 > SQL' 카테고리의 다른 글
1484. Group Sold Products By The Date (1) | 2022.12.06 |
---|---|
1667. Fix Names in a Table (0) | 2022.12.05 |
627. Swap Salary (0) | 2022.12.03 |
1873. Calculate Special Bonus (0) | 2022.12.03 |
183. Customers Who Never Order (0) | 2022.11.30 |