MySQL中查询、删除重复记录的方法大全

查找所有重复标题的记录:

select title,count(*) as count from user_table group by title having count>1;

SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC

一、查找重复记录

1、查找全部重复记录

SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC

2、过滤重复记录(只显示一条)

Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title)

注:此处显示ID最大一条记录

二、删除重复记录

1、删除全部重复记录(慎用)

Delete 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Coun 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 t(*)>1)

2、保留一条(这个应该是大多数人所需要的 _)

Delete HZT Where ID Not In (Select Max(ID) From HZT Group By Title)

注:此处保留ID最大一条记录

三、举例

1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录

delete from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

3、查找表中多余的重复记录(多个字段)

select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录

delete from project a
where (a.custom_no,a.project_code) in
(select custom_no,project_code FROM
(select custom_no,project_code from project group by custom_no,project_code having count() > 1) AS temp_a)
and
a.id not in
(select a_id FROM (select min(id) AS a_id from project group by custom_no,project_code having count(
)>1) AS temp_b)
注:因为mysql不支持直接查询修改方式,所以我们需要通过一个子查询的方式来获取我们想要的id

### 如何在数组中找到并删除最大值 要实现从数组中移除最大值的功能,可以按照以下逻辑完成: #### 方法一:基于 JavaScript 的 `reduce` 和 `filter` 如果目标是一个简单的数字数组,则可以通过组合使用 `Math.max()` 函数以及 `Array.prototype.filter()` 来实现。以下是具体代码示例[^4]: ```javascript const array = [10, 20, 30, 40, 50]; // 使用 Math.max 找到最大值 const maxValue = Math.max(...array); // 过滤掉等于最大值的元素 const result = array.filter(item => item !== maxValue); console.log(result); // 输出: [10, 20, 30, 40] ``` 上述代码首先利用扩展运算符 (`...`) 将数组传递给 `Math.max()` 函数计算出最大值,随后调用 `filter()` 方法创建一个新的数组,其中不包含任何与最大值相等的项。 --- #### 方法二:适用于对象数组的情况 对于由对象组成的数组,假设我们需要根据某个键(例如 `value` 属性)来查找并移除具有最大值的对象。此时可以采用如下方式[^2]: ```javascript const objects = [ { id: 1, value: 10 }, { id: 2, value: 20 }, { id: 3, value: 30 } ]; // 利用 reduce 寻找最大值对应的对象 const maxObject = objects.reduce((prev, current) => (prev.value > current.value ? prev : current)); // 移除该对象 const filteredObjects = objects.filter(obj => obj.id !== maxObject.id); console.log(filteredObjects); /* 输出: [ { id: 1, value: 10 }, { id: 2, value: 20 } ] */ ``` 这里先通过 `reduce` 遍历整个数组找出拥有最高 `value` 值的那个对象实例,再借助 `filter` 构建排除此对象的新集合。 --- #### 多维数组处理策略 如果是多维数组场景下操作,比如 C++ 中提到过的二维数组情形,在 JavaScript 中也可以模拟类似的结构来进行相同的操作[^1]。下面展示了一个例子: ```javascript let matrix = [[7, 8], [9, 6], [5, 3]]; matrix.forEach(row => { const maxInRow = Math.max.apply(null, row); let indexToRemove; for(let i=0;i<row.length;i++) { if(row[i]==maxInRow){ indexToRemove=i;break; } } row.splice(indexToRemove, 1); }); console.log(matrix); /* 输出结果为: [[7],[6],[5]] */ ``` 这段脚本会逐一遍历矩阵中的每一行子数组,定位各自内部的最大数位置,并执行剪切动作从而达到剔除目的。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值