Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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 删除带有“in”的重复记录_Sql_Postgresql_Sql Delete - Fatal编程技术网

Sql 删除带有“in”的重复记录

Sql 删除带有“in”的重复记录,sql,postgresql,sql-delete,Sql,Postgresql,Sql Delete,我有一张这样的桌子: 创建表foo id序列号, 一个整数, b整数, 一些双倍, 其他瓦查尔, 数据整数 ; 我知道a,b必须是唯一的,但由于某些原因,这不是数据库强制的。假设我不关心进一步的歧视,我只是不时地擦拭副本,也许只保留ID最大的最新副本: 从foo中删除,其中id不在中,通过a、b从foo组中选择maxid; 现在假设有几条100000条记录,在。。。变得相当大 我读过关于自连接的文章,比如:从foo中删除a左连接foo b在a.a=b.a和a.b=b.b上,其中b.id

我有一张这样的桌子:

创建表foo id序列号, 一个整数, b整数, 一些双倍, 其他瓦查尔, 数据整数 ; 我知道a,b必须是唯一的,但由于某些原因,这不是数据库强制的。假设我不关心进一步的歧视,我只是不时地擦拭副本,也许只保留ID最大的最新副本:

从foo中删除,其中id不在中,通过a、b从foo组中选择maxid; 现在假设有几条100000条记录,在。。。变得相当大

我读过关于自连接的文章,比如:从foo中删除a左连接foo b在a.a=b.a和a.b=b.b上,其中b.id
我有什么选择?

如果要删除旧的重复值,可以使用:

delete from foo
    where foo.id < (select max(foo2.id)
                    from foo foo2
                    where foo2.a = foo.a and foo2.b = foo.b
                   );

有a,b指数吗?没有。不过,与上面的“不在代码中”相比,戈登的回答还是超快的。哇!这是8秒相比,我的10分钟后仍然等待第一次尝试!对于我来说,对于子查询部分,我可以想象出什么样的中间表,这有点不可思议,但我认为这只表明我理解了这里的子查询。非常感谢你!
delete from foo
    using (select a, b, max(id) as max_id
           from foo
           group by a, b
          ) ab
    where foo.a = a.a and foo.b = ab.b and foo.id < ab.max_id;