数据冗余问题!
现在有一张userinfo表,其中各个字段除了id之外都可以为空,用户通过手工把两个excel中的数据添加到了表中,但是出现很多冗余数据,比如,表有五个字段,其中一条数据的五个字段都有值,另外一条有两个字段为空,其余三个字段和某条数据的对应字段相等,则第二条数据要删除,请问如何筛选这样的冗余数据?
[解决办法]
把表结构给出来,很多人会给你写sql语句
[解决办法]
筛选去重复
[解决办法]
这话实在
WITH T AS(SELECT '1' A,'2' B,'3' C,'4' D,'5' E FROM dual UNION ALLSELECT '21', '2', '3', '4', '5' FROM dual UNION ALL SELECT '1', '2', '3', NULL, NULL FROM dual UNION ALLSELECT '1', '2', NULL, NULL, NULL FROM dual UNION ALL SELECT '2', '1', '3', '4', '5' FROM dual UNION ALL SELECT '2', '1', '3', '4', NULL FROM dual )SELECT * FROM (SELECT '@'||RTRIM(NVL2(A,A,'')||'@'||NVL2(B,B,'')||'@'||NVL2(C,C,'')||'@'||NVL2(D,D,'')||'@'||NVL2(E,E,''),'@')||'@' ALLSTR,A,B,C,D,E FROM T) T1,(SELECT '@'||RTRIM(NVL2(A,A,'')||'@'||NVL2(B,B,'')||'@'||NVL2(C,C,'')||'@'||NVL2(D,D,'')||'@'||NVL2(E,E,''),'@')||'@' ALLSTR FROM T) T2WHERE T1.ALLSTR <> T2.ALLSTR AND INSTR(T2.ALLSTR,T1.ALLSTR) = 1 ;
[解决办法]
WITH T AS(SELECT '1' A,'2' B,'3' C,'4' D,'5' E FROM dual UNION ALLSELECT '21', '2', '3', '4', '5' FROM dual UNION ALL SELECT '1', '2', '3', NULL, NULL FROM dual UNION ALLSELECT '1', '2', NULL, NULL, NULL FROM dual UNION ALL SELECT '1', NULL, NULL, '4', NULL FROM dual UNION ALL SELECT '2', '1', '3', '4', '5' FROM dual UNION ALL SELECT '2', '1', '3', '4', NULL FROM dual )SELECT * FROM (SELECT '@'||RTRIM(NVL2(A,A,'(.*)')||'@'||NVL2(B,B,'(.*)')||'@'||NVL2(C,C,'(.*)')||'@'||NVL2(D,D,'(.*)')||'@'||NVL2(E,E,'(.*)'),'@')||'@' ALLSTR,A,B,C,D,E FROM T) T1,(SELECT '@'||RTRIM(NVL2(A,A,'')||'@'||NVL2(B,B,'')||'@'||NVL2(C,C,'')||'@'||NVL2(D,D,'')||'@'||NVL2(E,E,''),'@')||'@' ALLSTR FROM T) T2WHERE T1.ALLSTR <> T2.ALLSTR AND REGEXP_LIKE(T2.ALLSTR,T1.ALLSTR) ;