Sql 删除重复行(不删除所有重复行)
我正在使用postgres。 我想删除重复的行。 条件是,不会删除重复行集中的1个副本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
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 );