mysql去重
原因:由于表是各地归集过来的,通过前置机数据交换,很多数据会重复。
目的:删除数据库某张表的重复数据
方法一(将查询出无重复的数据导入临时表,再将原表删除,再将临时表的数据导回原表) 适用于无主键,所有字段完全匹配,数据量小的情况:
DELIMITER //
CREATE PROCEDURE delete_rows(IN tablename VARCHAR(50))
BEGIN
SET @tablename = tablename;
SET @tmp_table = CONCAT('tmp_table_',@tablename);
SET @create_table = CONCAT('DROP TABLE IF EXISTS ',@tmp_table);
PREPARE create_table FROM @create_table;
EXECUTE create_table;
SET @create_table = CONCAT('CREATE TEMPORARY TABLE ',@tmp_table,' SELECT DISTINCT * from ',@tablename);
PREPARE create_table FROM @create_table;
EXECUTE create_table;
SET @create_table = CONCAT('TRUNCATE TABLE ',@tablename);
PREPARE create_table FROM @create_table;
EXECUTE create_table;
SET @create_table = CONCAT('INSERT INTO ',@tablename,' SELECT * from ',@tmp_table);
PREPARE create_table FROM @create_table;
EXECUTE create_table;
END//
DELIMITER ;
CALL delete_rows('表名');
方法二(给表加自增主键) 适用于根据某几个字段去重,有主键:
DELIMITER //
CREATE PROCEDURE delete_rows_1(IN tablename VARCHAR(50),IN fieldnames VARCHAR(100),IN autofield VARCHAR(50))
BEGIN
SET @tablename = tablename;
SET @fieldnames = fieldnames;
SET @autofield = autofield;
SET @create_table = CONCAT('DELETE FROM ', @tablename ,' WHERE ', @autofield ,' not in (SELECT id FROM (SELECT max(', @autofield ,') id FROM ', @tablename ,' GROUP BY ', @fieldnames ,') t)');
PREPARE create_table FROM @create_table;
EXECUTE create_table;
END//
DELIMITER ;
CALL delete_rows_1('表名', '字段1,字段2,字段3...', '主键字段');
有三个字送给你,
一是“诚”,
二是“勤”,
三是“专”。
当你无比地想做成一件事,
愿意为它倾尽无数心血和努力时,
结果总不会太差。
一是“诚”,
二是“勤”,
三是“专”。
当你无比地想做成一件事,
愿意为它倾尽无数心血和努力时,
结果总不会太差。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架