Я использую postgres.Я хочу удалить дубликаты строк.Условие состоит в том, что 1 копия из набора повторяющихся строк не будет удалена.
, т. Е. Если имеется 5 дублирующих записей, то 4 из них будут удалены.
Попробуйте выполнить шаги, описанные в этой статье: Удаление дубликатов из базы данных PostgreSQL .
В нем описывается ситуация, когда вам приходится иметь дело с огромным количеством данных, которые невозможноgroup by.
group by
Простое решение будет следующим:
DELETE FROM foo WHERE id NOT IN (SELECT min(id) --or max(id) FROM foo GROUP BY hash)
Где hash - это то, что дублируется.
hash
delete from table where not id in (select max(id) from table group by [duplicate row])
Это случайный (максимальное значение) выбор, какую строку вам нужно сохранить.Если вы согласны с этим, пожалуйста, предоставьте более подробную информацию
Самое быстрое - это присоединиться к одному столу. 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)
delete from table t1 where rowid > (SELECT min(rowid) FROM table t2 group by t2.id,t2.name );