数据比对的sql(oracle数据库)
来源:互联网 发布:linux system 和 execl 编辑:程序博客网 时间:2024/06/05 19:27
一个表中uniquecoding字段有重复值,还有一个cmp_state字段,代表状态,要求对uniquecoding字段重复的记录只留一条不做标记,其它的对其cmp_state全都标记为"重复"
-- 去重,自己比自己
update COMP_ASC_TEST_1 set cmp_state='重复' where id in(
select b.id from
(
select id,uniquecoding,rownum num from(
select id,uniquecoding from COMP_ASC_TEST_1 ascs where uniquecoding in
(
select distinct uniquecoding from COMP_ASC_TEST_1 group by uniquecoding having count(uniquecoding)>1-- order by uniquecoding asc
)order by uniquecoding asc--, uniquecoding asc
)
) a join
(
select id,uniquecoding,rownum-1 num from(
select id,uniquecoding from COMP_ASC_TEST_1 ascs where uniquecoding in
(
select distinct uniquecoding from COMP_ASC_TEST_1 group by uniquecoding having count(uniquecoding)>1-- order by uniquecoding asc
)order by uniquecoding asc--, uniquecoding asc
)
) b
on a.num=b.num and A.UNIQUECODING=b.uniquecoding
)
--获取两个表中uniquecoding一致并且条数一样的记录(N:N),并跟新为“id不一致1-1”
update COMP_ASC_TEST_1 asc_test set asc_test.cmp_state='id不一致1-1'
where
asc_test.uniquecoding in
(
select aa.uniquecoding,TOTAL1 from
(
select count(ascs.uniquecoding) as total1,uniquecoding from COMP_ASC_TEST_1 ascs group by uniquecoding order by total1 desc
) aa,
(
select count(bw.uniquecoding) as total2,uniquecoding from comp_tskf_test_1 bw group by uniquecoding order by total2 desc
) bb
where aa.uniquecoding=bb.uniquecoding
and total1=total2 and total1>1
)
--获取两个表中uniquecoding一致并且条数一样的记录(1:1)且asc目bw非的记录,并跟新状态为“ASC目BW非”
update COMP_ASC_TEST_1 asc_test set asc_test.cmp_state='ASC目BW非'
where
asc_test.uniquecoding in
(
select ASCS.ID from comptest_asc ASCS,comptest_by BW where ASCS.WANQUANYIZHI=BW.WANQUANYIZHI and
ASCS.wanquanyizhi in
(
select aa.wanquanyizhi from
(
select count(ascs.wanquanyizhi) as total1,wanquanyizhi from comptest_asc ascs group by wanquanyizhi order by total1 desc
) aa,
(
select count(bw.wanquanyizhi) as total2,wanquanyizhi from comptest_by bw group by wanquanyizhi order by total2 desc
) bb
where aa.wanquanyizhi=bb.wanquanyizhi
and total1=total2 and total1=1
) and substr(ASCS.receiver_id,0,1)='M'
and substr(BW.RECEIVER_ID,0,1)='F'
)
--N:N+N,更新N端,设置状态为:“客户id不一致2”
UPDATE COMP_ASC_TEST_1 SET CMP_STATE='客户id不一致2' WHERE ID IN
(
SELECT A.ID FROM
(
SELECT ID,UNIQUECODING,ROW_NUMBER() OVER (PARTITION BY UNIQUECODING ORDER BY UNIQUECODING) AS ORD FROM COMP_ASC_TEST_1
)A JOIN
(
SELECT ID,UNIQUECODING,ROW_NUMBER() OVER (PARTITION BY UNIQUECODING ORDER BY UNIQUECODING) AS ORD FROM COMP_TSKF_TEST_1
)
B ON A.UNIQUECODING=B.UNIQUECODING AND A.ORD=B.ORD
AND A.UNIQUECODING IN
(
SELECT A.UNIQUECODING FROM
(
SELECT COUNT(*) AS TOTAL,UNIQUECODING FROM COMP_ASC_TEST_1 GROUP BY UNIQUECODING HAVING COUNT(*)>1
)A JOIN
(
SELECT COUNT(*) AS TOTAL,UNIQUECODING FROM COMP_TSKF_TEST_1 GROUP BY UNIQUECODING HAVING COUNT(*)>1
)B ON A.UNIQUECODING=B.UNIQUECODING AND A.TOTAL<B.TOTAL
)
);
-- 去重,自己比自己
update COMP_ASC_TEST_1 set cmp_state='重复' where id in(
select b.id from
(
select id,uniquecoding,rownum num from(
select id,uniquecoding from COMP_ASC_TEST_1 ascs where uniquecoding in
(
select distinct uniquecoding from COMP_ASC_TEST_1 group by uniquecoding having count(uniquecoding)>1-- order by uniquecoding asc
)order by uniquecoding asc--, uniquecoding asc
)
) a join
(
select id,uniquecoding,rownum-1 num from(
select id,uniquecoding from COMP_ASC_TEST_1 ascs where uniquecoding in
(
select distinct uniquecoding from COMP_ASC_TEST_1 group by uniquecoding having count(uniquecoding)>1-- order by uniquecoding asc
)order by uniquecoding asc--, uniquecoding asc
)
) b
on a.num=b.num and A.UNIQUECODING=b.uniquecoding
)
--获取两个表中uniquecoding一致并且条数一样的记录(N:N),并跟新为“id不一致1-1”
update COMP_ASC_TEST_1 asc_test set asc_test.cmp_state='id不一致1-1'
where
asc_test.uniquecoding in
(
select aa.uniquecoding,TOTAL1 from
(
select count(ascs.uniquecoding) as total1,uniquecoding from COMP_ASC_TEST_1 ascs group by uniquecoding order by total1 desc
) aa,
(
select count(bw.uniquecoding) as total2,uniquecoding from comp_tskf_test_1 bw group by uniquecoding order by total2 desc
) bb
where aa.uniquecoding=bb.uniquecoding
and total1=total2 and total1>1
)
--获取两个表中uniquecoding一致并且条数一样的记录(1:1)且asc目bw非的记录,并跟新状态为“ASC目BW非”
update COMP_ASC_TEST_1 asc_test set asc_test.cmp_state='ASC目BW非'
where
asc_test.uniquecoding in
(
select ASCS.ID from comptest_asc ASCS,comptest_by BW where ASCS.WANQUANYIZHI=BW.WANQUANYIZHI and
ASCS.wanquanyizhi in
(
select aa.wanquanyizhi from
(
select count(ascs.wanquanyizhi) as total1,wanquanyizhi from comptest_asc ascs group by wanquanyizhi order by total1 desc
) aa,
(
select count(bw.wanquanyizhi) as total2,wanquanyizhi from comptest_by bw group by wanquanyizhi order by total2 desc
) bb
where aa.wanquanyizhi=bb.wanquanyizhi
and total1=total2 and total1=1
) and substr(ASCS.receiver_id,0,1)='M'
and substr(BW.RECEIVER_ID,0,1)='F'
)
--N:N+N,更新N端,设置状态为:“客户id不一致2”
UPDATE COMP_ASC_TEST_1 SET CMP_STATE='客户id不一致2' WHERE ID IN
(
SELECT A.ID FROM
(
SELECT ID,UNIQUECODING,ROW_NUMBER() OVER (PARTITION BY UNIQUECODING ORDER BY UNIQUECODING) AS ORD FROM COMP_ASC_TEST_1
)A JOIN
(
SELECT ID,UNIQUECODING,ROW_NUMBER() OVER (PARTITION BY UNIQUECODING ORDER BY UNIQUECODING) AS ORD FROM COMP_TSKF_TEST_1
)
B ON A.UNIQUECODING=B.UNIQUECODING AND A.ORD=B.ORD
AND A.UNIQUECODING IN
(
SELECT A.UNIQUECODING FROM
(
SELECT COUNT(*) AS TOTAL,UNIQUECODING FROM COMP_ASC_TEST_1 GROUP BY UNIQUECODING HAVING COUNT(*)>1
)A JOIN
(
SELECT COUNT(*) AS TOTAL,UNIQUECODING FROM COMP_TSKF_TEST_1 GROUP BY UNIQUECODING HAVING COUNT(*)>1
)B ON A.UNIQUECODING=B.UNIQUECODING AND A.TOTAL<B.TOTAL
)
);
- 数据比对的sql(oracle数据库)
- oracle 比对数据库表和数据表数据(PL\SQL)
- oracle 比对数据库表和数据表数据(PL\SQL)
- Oracle数据库比对更新数据
- oracle 两张表比对数据
- Oracle、MySql、Sql Server比对
- 谈oracle数据比对(DBMS_COMPARISON)
- oracle 循环比对两张表数据差异
- 使用SQL语句进行数据比对
- 使用SQL语句对Oracle数据库数据进行拼接
- Oracle(27)pl/sql编程 数据库管理员及对数据库的备份和恢复
- 分享一个自己写的用python比对数据库表数据的脚本
- Oracle 中比对2 张表之间数据是否一致的几种方法
- Oracle中比对2张表之间数据是否一致的几种方法
- 数据库日期比对的效率提升
- ORACLE数据库SQL优化--->ORACLE访问数据的方法
- 内存库表数据的比对
- Oracle sql not in 多字段比对示例
- java语言中的静态块
- 关于oracle中几个常用的函数(转)
- oracle的分析函数
- oracle中创建表的另外一种方式
- oracle中申明变量并执行sql语句(貌似跟sql server有点差别)
- 数据比对的sql(oracle数据库)
- ext学习笔记
- Class.forName() 和 ClassLoader.loadClass()的区别?
- log4j配置
- uml建模中的各种图
- sqldeveloper使用
- rank()、dense_rank()、row_number()、first、last比较
- 《Android内核剖析》笔记 第1章 Linux基础
- count(*) over (partition by ……)用法详解