[SQL] 하나를 제외한 모든 중복 레코드를 삭제
SQL하나를 제외한 모든 중복 레코드를 삭제
나는 주어진 프로파일 (사용자 ID 쌍에 대한 사용자 ID) 방문객의 추적을 유지하도록되어 테이블이있다. 그것은 내 SQL 쿼리가 조금 벗어났다 밝혀 의도 한대로 대신 한 사람의 여러 쌍을 생산하고있다. 돌이켜 보면 나는 각각의 아이디 + 아이디 쌍에 고유 제한 조건을 적용해야합니다.
자, 어떻게 테이블까지 청소에 대해 갈 수 있을까? 내가하고 싶은 모든 중복 쌍을 삭제하고 하나를두고있다.
그래서 예를 들어이 값을 변경 :
23515 -> 52525 date_visited
23515 -> 52525 date_visited
23515 -> 52525 date_visited
12345 -> 54321 date_visited
12345 -> 54321 date_visited
12345 -> 54321 date_visited
12345 -> 54321 date_visited
23515 -> 52525 date_visited
...
이 속으로 :
23515 -> 52525 date_visited
12345 -> 54321 date_visited
업데이트 : 여기에 요청에 따라 테이블 구조는 다음과 같습니다
id int(10) UNSIGNED Non Aucun AUTO_INCREMENT
profile_id int(10) UNSIGNED Non 0
visitor_id int(10) UNSIGNED Non 0
date_visited timestamp Non CURRENT_TIMESTAMP
해결법
-
==============================
1.ANSI는 솔루션을 뿌렸다
ANSI는 솔루션을 뿌렸다
하위 쿼리에 의해 그룹을 사용 :
delete from my_tab where id not in (select min(id) from my_tab group by profile_id, visitor_id);
당신은 고유 식별자 (여기, 내가 ID를 사용하고 있습니다)의 일종이 필요합니다.
MySQL의 솔루션
@JamesPoulson에 의해 지적이는 MySQL의에 구문 오류가 발생합니다; (제임스의 대답에서와 같이) 올바른 솔루션입니다 :
delete from `my_tab` where id not in ( SELECT * FROM (select min(id) from `my_tab` group by profile_id, visitor_id) AS temp_tab );
-
==============================
2.다음은 MySQL을 작업에 자신의 해결책을 허용하는 임시 테이블을 사용하는 작은 해결과 프랭크 슈미트의 솔루션입니다 :
다음은 MySQL을 작업에 자신의 해결책을 허용하는 임시 테이블을 사용하는 작은 해결과 프랭크 슈미트의 솔루션입니다 :
delete from `my_tab` where id not in ( SELECT * FROM (select min(id) from `my_tab` group by profile_id, visitor_id) AS temp_tab )
-
==============================
3.이것은 작동합니다 :
이것은 작동합니다 :
With NewCTE AS ( Select *, Row_number() over(partition by ID order by ID)as RowNumber from table_name ) Delete from NewCTE where RowNumber > 1
-
==============================
4.모든 고유 행을 선택 새로운 임시 테이블로 복사 자르기 원래 테이블 원래 테이블에 복사 임시 테이블 데이터 그게 내가 할 일이야. 당신을 위해 모든 것을 할 것 1 개 쿼리 거기에 있는지 확실하지 않습니다.
모든 고유 행을 선택 새로운 임시 테이블로 복사 자르기 원래 테이블 원래 테이블에 복사 임시 테이블 데이터 그게 내가 할 일이야. 당신을 위해 모든 것을 할 것 1 개 쿼리 거기에 있는지 확실하지 않습니다.
-
==============================
5.당신은 SQL을 사용하는 경우에는 수동으로 만이 절차를 수행 한 항목을 유지 중복 행을 삭제할 수 있습니다 :
당신은 SQL을 사용하는 경우에는 수동으로 만이 절차를 수행 한 항목을 유지 중복 행을 삭제할 수 있습니다 :
그것은 긴 과정이다 그러나 당신은 실시간으로 즉시 결과를 볼 수 있습니다.
당신을 위해 일이 솔루션을 희망!
from https://stackoverflow.com/questions/5882649/delete-all-but-one-duplicate-record by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 포스트 그레스에 이동 평균 지수를 계산? (0) | 2020.06.24 |
---|---|
[SQL] LIKE 조건 : SQL과 같은 동일 카산드라에 대한 모든 쿼리가 있습니까? (0) | 2020.06.24 |
[SQL] SQL 서버 저장 프로 시저는 테이블을 반환 (0) | 2020.06.24 |
[SQL] 그 합류 값의 합을 SQL 업데이트 (0) | 2020.06.24 |
[SQL] 어떻게 오라클 데이터베이스에 "&"같은 특수 문자를 입력하려면? [복제] (0) | 2020.06.24 |