[SQL] 삭제 중복 행 (모든 중복을 삭제하지 마십시오)
SQL삭제 중복 행 (모든 중복을 삭제하지 마십시오)
나는 포스트 그레스를 사용하고 있습니다. 나는 중복 행을 삭제합니다. 조건은 중복 행의 세트에서 한 복사본이 삭제되지 않을 것이다.
즉 : 다음 중 4 삭제됩니다 5 개 중복 레코드가있는 경우.
해결법
-
==============================
1.이 문서에 설명 된 단계를 시도하십시오 PostgreSQL 데이터베이스에서 중복 제거.
이 문서에 설명 된 단계를 시도하십시오 PostgreSQL 데이터베이스에서 중복 제거.
당신은 그룹화 할 수없는 엄청난 양의 데이터를 처리 할 때 상황을 설명합니다.
간단한 솔루션이 될 것입니다 :
DELETE FROM foo WHERE id NOT IN (SELECT min(id) --or max(id) FROM foo GROUP BY hash)
어디 해시 중복됩니다 무언가이다.
-
==============================
2.
delete from table where not id in (select max(id) from table group by [duplicate row])
이것은 당신이 계속해야 행 임의 (최대 값) 선택입니다. 당신이 aggre이있는 경우이 자세한 내용을 제공하십시오 오순절
-
==============================
3.가장 빠른는이 같은 테이블에 조인. http://www.postgresql.org/docs/8.1/interactive/sql-delete.html
가장 빠른는이 같은 테이블에 조인. http://www.postgresql.org/docs/8.1/interactive/sql-delete.html
CREATE TABLE test(id INT,id2 INT); CREATE TABLE mapy=# INSERT INTO test VALUES(1,2); INSERT 0 1 mapy=# INSERT INTO test VALUES(1,3); INSERT 0 1 mapy=# INSERT INTO test VALUES(1,4); INSERT 0 1 DELETE FROM test t1 USING test t2 WHERE t1.id=t2.id AND t1.id2<t2.id2; DELETE 2 mapy=# SELECT * FROM test; id | id2 ----+----- 1 | 4 (1 row)
-
==============================
4.
delete from table t1 where rowid > (SELECT min(rowid) FROM table t2 group by t2.id,t2.name );
from https://stackoverflow.com/questions/3777633/delete-duplicate-rows-dont-delete-all-duplicate by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 필드의 고유 항목 Access 쿼리에서 계산합니까? (0) | 2020.03.29 |
---|---|
[SQL] 왼쪽 외부가 작동하지 않는다 가입? (0) | 2020.03.29 |
[SQL] 자바 날짜 - 데이터베이스에 삽입 (0) | 2020.03.29 |
[SQL] 구문 분석 쉼표로 구분 된 문자열은 Where 절에서 문자열의 IN 목록을 만들려면 (0) | 2020.03.29 |
[SQL] 어떻게에만 시간을 저장합니다; 하지 날짜와 시간? (0) | 2020.03.29 |