Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 删除重复行(不删除所有重复行)_Sql_Postgresql_Duplicate Removal - Fatal编程技术网

Sql 删除重复行(不删除所有重复行)

Sql 删除重复行(不删除所有重复行),sql,postgresql,duplicate-removal,Sql,Postgresql,Duplicate Removal,我正在使用postgres。 我想删除重复的行。 条件是,不会删除重复行集中的1个副本 i、 e:如果有5条重复记录,则其中4条将被删除。请尝试本文中描述的步骤: 它描述了一种情况,即您必须处理大量无法分组的数据 一个简单的解决方案是: DELETE FROM foo WHERE id NOT IN (SELECT min(id) --or max(id) FROM foo GROUP

我正在使用postgres。 我想删除重复的行。 条件是,不会删除重复行集中的1个副本


i、 e:如果有5条重复记录,则其中4条将被删除。

请尝试本文中描述的步骤:

它描述了一种情况,即您必须处理大量无法分组的数据

一个简单的解决方案是:

DELETE FROM foo
       WHERE id NOT IN (SELECT min(id) --or max(id)
                        FROM foo
                        GROUP BY hash)
其中散列是被复制的东西

delete from table
where not id in 
(select max(id) from table group by [duplicate row])
这是需要保留的行的随机最大值选择。
如果您有此问题,请提供更多详细信息

最快的是加入同一个表。


多么讽刺的可能重复!lol‘如何删除重复项的可能重复项’……这不是也会删除所有没有重复项的行吗?@pomarc no,因为在1之前有一个等号=告诉我们要对所有可能的组进行minid,即使是只包含一个成员的组;所以,不用担心,您不会删除不重复的数据,因为计数*>=1是必需的?如果执行:DELETE FROM foo,其中id不在SELECT minid FROM foo GROUP BY中,则得到相同的结果hash@grteibo你完全正确,重复数据消除通常就是这样做的;我不知道为什么我以前没有注意到这一点;这个答案的想法与其说是重复数据消除本身,不如说是我们为所有要分组的列计算一个哈希值,然后删除重复项
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 );