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

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

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

Spring Boot 整合 Apache Flink 的详细过程

《SpringBoot整合ApacheFlink的详细过程》ApacheFlink是一个高性能的分布式流处理框架,而SpringBoot提供了快速构建企业级应用的能力,下面给大家介绍Spri... 目录Spring Boot 整合 Apache Flink 教程一、背景与目标二、环境准备三、创建项目 & 添

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化: