고객 테이블이 있습니다.
id | name | email
--------------------------
1 | Rob | [email protected]
2 | Jim | [email protected]
3 | Dave | [email protected]
4 | Fred | [email protected]
5 | Ben | [email protected]
6 | Tom | [email protected]
중복 된 이메일 주소가있는 모든 행을 반환하는 SQL 쿼리를 작성하려고하는데 ... 쿼리 결과가 원래 ID 와 중복 ID 를 반환하고 싶습니다 . (원래 ID는 중복 이메일의 첫 번째 발생입니다.)
원하는 결과 :
original_id | duplicate_id | email
-------------------------------------------
1 | 2 | [email protected]
3 | 5 | [email protected]
3 | 6 | [email protected]
지금까지 내 연구에 따르면 일종의 자체 조인이 포함될 수 있지만 실제 구현에 갇혀 있습니다. 누구든지 도울 수 있습니까?
select
orig.original_id,
t.id as duplicate_id,
orig.email
from t
inner join (select min(id) as original_id, email
from t
group by email
having count(*)>1) orig on orig.email = t.email
having t.id!=orig.original_id
하위 쿼리를 통해 중복 된 이메일의 모든 ID를 찾을 수 있습니다.
그런 다음 이메일로 하위 쿼리에 가입하고 각각에 대해 최소한의 ID를 원본으로 사용합니다.
업데이트 : http://rextester.com/BLIHK20984 복제 @Tim Biegeleisen의 답변
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다