728x90
Delete 문을 사용해서 테이블에서 행 제거
DELETE p FROM Person p INNER JOIN Person p2 ON p.Email = p2.Email AND p.Id > p2.Id;
궁금증이 생기는데
on 절에 조건을 줄 경우 어떤식으로 영향이 미치는가
위의 코드에서는 and라는 조건이 추가된 것이다.
[ON vs WHERE]
ON : JOIN 을 하기 전 필터링을 한다 (=ON 조건으로 필터링이 된 레코들간 JOIN이 이뤄진다)
WHERE : JOIN 을 한 후 필터링을 한다 (=JOIN을 한 결과에서 WHERE 조건절로 필터링이 이뤄진다)
다른 풀이
With cte as (select min(Id) as Id, Email
from Person
group by Email)
Delete from Person
where Id not in (select Id from cte)
cte라는 가상의 테이블 생성
email group by 하고 id가 min인 것만 선택
where 문에서 cte로 생성된 min id 제외한 나머지 행들을 선택
delete 문으로 해당 행들을 테이블에서 제거.
728x90
'SQL' 카테고리의 다른 글
[LeetCode] Classes More Than 5 Students (group by, having, count, distinct) (0) | 2021.04.09 |
---|---|
[LeetCode] Rising Temperature (interval, self join) (0) | 2021.04.09 |
[LeetCode] Customes Who Never Order (is null, join) (0) | 2021.04.09 |
[LeetCode] Duplicate Emails (group by, having) (0) | 2021.04.09 |
[LeetCode] Employees Earning More Than Their Managers (Self Join) (0) | 2021.04.08 |
댓글