存储过程批量删除多个子表中的重复数据

2023-11-29 19:08

本文主要是介绍存储过程批量删除多个子表中的重复数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

``````
use database;
set names utf8;-- 删除客户表子表中的重复数据
DELIMITER //
drop procedure if exists delFieldPro// 
CREATE PROCEDURE delFieldPro()  
BEGIN  DECLARE tableName varchar(100) default '';   DECLARE done INT DEFAULT 0;  DECLARE taskCursor CURSOR FOR select table_name from information_schema.tables where table_schema='uc_ipcc_cloud_ai' and table_name like  'tb_customer_%' and table_name not like  'tb_customer_contact%' ;  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;  OPEN taskCursor;  REPEAT  FETCH taskCursor INTO tableName;  IF not done THEN  set @sql0=concat('delete from tb_tmp;') ;PREPARE stmt0 from @sql0; execute stmt0;set @sql=concat('insert into tb_tmp select t.id from ( select max(id) id,customer_nbr,count(1) cu from ',tableName,'  group by customer_nbr having cu>1) t') ;PREPARE stmt from @sql; execute stmt;set @sql1=concat('delete from ',tableName,'  where id in (select id from tb_tmp)');PREPARE stmt1 from @sql1; execute stmt1;END IF;  UNTIL done END REPEAT;  CLOSE taskCursor;
END 
//
DELIMITER ;
CALL delFieldPro();-- 给客户子表添加唯一索引
DELIMITER //
drop procedure if exists addUniqueIndexPro// 
CREATE PROCEDURE addUniqueIndexPro()  
BEGIN  DECLARE tableName varchar(100) default '';   DECLARE done INT DEFAULT 0;  DECLARE taskCursor CURSOR FOR select table_name from information_schema.tables where table_schema='database' and table_name like  'tb_customer_%' and table_name not like  'tb_ucpaas_customer_contact%' ;  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;  OPEN taskCursor;  REPEAT  FETCH taskCursor INTO tableName;  IF not done THEN  set @sql0=concat('ALTER TABLE  ',tableName,' ADD unique(customer_nbr);') ;PREPARE stmt0 from @sql0; execute stmt0;      END IF;  UNTIL done END REPEAT;  CLOSE taskCursor;
END 
//
DELIMITER ;
CALL addUniqueIndexPro();-- 找出客户表中含有重复号码的表
DELIMITER //
drop procedure if exists proc_find_repeatNum;
create procedure proc_find_repeatNum (out sum varchar(1000))
BEGINDECLARE tableName varchar(100) default '';   DECLARE done INT DEFAULT 0; DECLARE _num int DEFAULT 0;DECLARE taskCursor CURSOR FOR select table_name from information_schema.tables where table_schema='database' and table_name like  'tb_customer_%' and table_name not like  'tb_ucpaas_customer_contact%' ;  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;  OPEN taskCursor;  REPEAT  FETCH taskCursor INTO tableName;  IF not done THEN  set @x ='';set @sql0=concat('select count(1) into @tnum from  (select customer_nbr,count(1) cu from ',tableName,' group by customer_nbr having cu>1) t;') ;PREPARE stmt0 from @sql0; execute stmt0;  deallocate prepare stmt0;SET _num = @tnum;if(_num > 0)then  SET sum= concat(tableName,',');END IF;END IF;  UNTIL done END REPEAT;  CLOSE taskCursor;
end
//
DELIMITER ;
call proc_find_repeatNum(@sum);
-- 查询结果集
select @sum;---删除某张表的重复数据
select count(1) from  (select customer_nbr,count(1) cu from tb_customer_ddd92456d085c9dd4976b59c90e48de6 group by customer_nbr having cu>1) t;
delete from tb_tmp;
insert into tb_tmp select t.id from ( select max(id) id,customer_nbr,count(1) cu from tb_customer_ddd92456d085c9dd4976b59c90e48de6  group by customer_nbr having cu>1) t ;
delete from tb_customer_ddd92456d085c9dd4976b59c90e48de6 where id in (select id from tb_tmp);``````

-- 删除多余索引
DELIMITER //
drop procedure if exists delUniqueIndexPro// 
CREATE PROCEDURE delUniqueIndexPro()  
BEGIN  DECLARE tableName varchar(100) default '';   DECLARE done INT DEFAULT 0;  DECLARE taskCursor CURSOR FOR select table_name from information_schema.tables where table_schema='uc_ipcc_cloud_ai' and table_name like  'tb_ucpaas_customer_%' and table_name not like  'tb_ucpaas_customer_contact%' ;  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;  OPEN taskCursor;  REPEAT  FETCH taskCursor INTO tableName;  IF not done THEN  IF EXISTS (SELECT * FROM information_schema.statistics WHERE table_schema='uc_ipcc_cloud_ai' AND table_name = tableName AND index_name = 'customer_nbr_2') THENset @sql0=concat('ALTER TABLE  ',tableName,' drop index customer_nbr_2 ;') ;PREPARE stmt0 from @sql0; execute stmt0; END IF;IF EXISTS (SELECT * FROM information_schema.statistics WHERE table_schema='uc_ipcc_cloud_ai' AND table_name = tableName AND index_name = 'customer_nbr_3') THENset @sql0=concat('ALTER TABLE  ',tableName,' drop index customer_nbr_3;') ;PREPARE stmt0 from @sql0; execute stmt0; END IF;IF EXISTS (SELECT * FROM information_schema.statistics WHERE table_schema='uc_ipcc_cloud_ai' AND table_name = tableName AND index_name = 'customer_nbr_4') THENset @sql0=concat('ALTER TABLE  ',tableName,' drop index customer_nbr_4;') ;PREPARE stmt0 from @sql0; execute stmt0; END IF;IF EXISTS (SELECT * FROM information_schema.statistics WHERE table_schema='uc_ipcc_cloud_ai' AND table_name = tableName AND index_name = 'idx_customer_nbr') THENset @sql0=concat('ALTER TABLE  ',tableName,' drop index idx_customer_nbr;') ;PREPARE stmt0 from @sql0; execute stmt0; END IF;  END IF;UNTIL done END REPEAT;  CLOSE taskCursor;
END 
//
DELIMITER ;
CALL delUniqueIndexPro();

这篇关于存储过程批量删除多个子表中的重复数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/433964

相关文章

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

Linux命令rm如何删除名字以“-”开头的文件

《Linux命令rm如何删除名字以“-”开头的文件》Linux中,命令的解析机制非常灵活,它会根据命令的开头字符来判断是否需要执行命令选项,对于文件操作命令(如rm、ls等),系统默认会将命令开头的某... 目录先搞懂:为啥“-”开头的文件删不掉?两种超简单的删除方法(小白也能学会)方法1:用“--”分隔命

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

Ubuntu向多台主机批量传输文件的流程步骤

《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信... 目录Ubuntu 向多台主机批量传输文件1.安装 sshpass2.准备主机列表文件3.创建一个批处理脚

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda