Удалить дубликаты строк (не удалять все дубликаты) - PullRequest
13 голосов
/ 23 сентября 2010

Я использую postgres.Я хочу удалить дубликаты строк.Условие состоит в том, что 1 копия из набора повторяющихся строк не будет удалена.

, т. Е. Если имеется 5 дублирующих записей, то 4 из них будут удалены.

Ответы [ 4 ]

18 голосов
/ 23 сентября 2010

Попробуйте выполнить шаги, описанные в этой статье: Удаление дубликатов из базы данных PostgreSQL .

В нем описывается ситуация, когда вам приходится иметь дело с огромным количеством данных, которые невозможноgroup by.

Простое решение будет следующим:

DELETE FROM foo
       WHERE id NOT IN (SELECT min(id) --or max(id)
                        FROM foo
                        GROUP BY hash)

Где hash - это то, что дублируется.

2 голосов
/ 23 сентября 2010
delete from table
where not id in 
(select max(id) from table group by [duplicate row])

Это случайный (максимальное значение) выбор, какую строку вам нужно сохранить.Если вы согласны с этим, пожалуйста, предоставьте более подробную информацию

1 голос
/ 23 сентября 2010

Самое быстрое - это присоединиться к одному столу. 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)
0 голосов
/ 30 апреля 2019
delete from table t1 
where rowid > (SELECT min(rowid) FROM table t2 group by 
               t2.id,t2.name );
...