设为首页 加入收藏

TOP

pg数据库查询重复数据并可识别空数据列重复的方法
2017-11-23 08:31:49 】 浏览:81
Tags:数据库 查询 重复 数据 识别 方法

根据多个字段查询重复数据:SELECT A,B,C FROM TABLE WHERE CONDITION GROUP BY A,B,C HAVING COUNT(*)>1即可,但是现在的需求是:

最终查询的字段多于分组字段,且同一字段的空值也视为重复。在网上查询了很多资料,也询问了同事最后尝试出如下sql:

SELECT A,B,C,D,E FROM TABLE A WHERE EXISTS(SELECT A,B,C FROM TABLE B WHERE CONDITION AND COALESCE(A.A,'0')=COALESCE(B.A,'0') AND COALESCE(A.B,'0')=COALESCE(B.B,'0') AND COALESCE(A.C,'0')=COALESCE(B.C,'0') GROUP BY A,B,C HAVING COUNT(*)>1);

注意:上述sql中coalesce()函数中的后一个值是自己设置的,但设置的值的类型要与前一个值的类型相同。

如果要处理相同条件下查询出的数据,可使用如下sql:

DELETE FROM TABLE WHERE ID NOT IN(SELECT ID FROM

(SELECT MIN(ID) ID,A,B,C FROM TABLE WHERE CONDITION GROUP BY A,B,C HAVING COUNT(*)>1) C)

AND ID IN(SELECT ID FROM TABLE A WHERE EXISTS

(SELECT A,B,C FROM TABLE B WHERE CONDITION AND COALESCE(A.A,'0')=COALESCE(B.A,'0') AND COALESCE(A.B,'0')=COALESCE(B.B,'0') AND COALESCE(A.C,'0')=COALESCE(B.C,'0') GROUP BY A,B,C HAVING COUNT(*)>1))

这里涉及到IN与EXISTS,NOT IN与NOT EXISTS的区别,有兴趣的同学可以查一查。

虽然能实现查重及去重功能,但是在大数据量时模型会运行特别慢,和数据库也有一定关系。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇case语句编写mysql启动脚本 下一篇安装好MySQL数据库之后的操作步骤..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目