leetcode의 데이터베이스 테이블 리셋 문제

1409 단어
이것은 내가 leetcode에서 만난 제목이다: Write a SQL query to delete all duplicate email entries in a table named Person, keeping only unique emails based on its smallest Id.
 +----+------------------+
| Id | Email            |
+----+------------------+
| 1  | [email protected] |
| 2  | [email protected]  |
| 3  | [email protected] |
+----+------------------+
Id is the primary key column for this table.

For example, after running your query, the above Person table should have the following rows:
+----+------------------+
| Id | Email            |
+----+------------------+
| 1  | [email protected] |
| 2  | [email protected]  |
+----+------------------+

처음에 내 생각은 정말 간단했다. 직접 하위 검색으로 삭제하고 싶었다.
   delete from Person 
    where Id in (select * from (select Id from Person group by Email having count(Email)>1) a)
        and Id not in (select * from (select min(Id) from Person group by Email having count(Email)>1) b)

오랫동안 SQL을 쓰지 않았는데, 나의 이 생각이 정말 유치하다는 것을 발견하였다.일단 제목 토론 한번 해볼게요.
you're doing an UPDATE/INSERT/DELETE on a table, you can't reference that table in an inner query (you can however reference a field from that outer table...)
표를 쓸 수 없을 때 내부 조회 인용을 합니다.마지막으로 좋은 답을 드리겠습니다.
delete p1 from Person p1,Person p2 where 
    p1.Email = p2.Email 
        and
    p1.Id > p2.Id

좋은 웹페이지 즐겨찾기