假设现有一张人员表(表名:ta_name),若想将姓名(name)这字段完全相同的记录查找出来应该怎么做呢?


1、查找表中多余的重复记录,根据字段(name)来判断重复数据。

select * from ta_name where name in (select name from ta_name group by name having count(name) > 1)


2、删除表中多余的重复记录,重复记录是根据单个字段(name)来判断,只留有id最小的记录,这个亲测有效,网上有一些方法在mysql 5.7版本后就会报1005错。

因为在mysql5.7 sql_mode中默认存在ONLY_FULL_GROUP_BY,SQL语句未通过ONLY_FULL_GROUP_BY语义检查所以报错。我这个sql在任何版本都有效。

DELETE FROM ta_name WHERE id IN (
SELECT id FROM (
select id from ta_name 
  where name in (select name from ta_name  group by name having count(name) > 1) 
  and id not in (select min(id) from ta_name  group by name having count(name)>1)
) t
)

3.补充一条:查询存在一个表而不在另一个表中的数据记录

select A.id from  A where A.id not in (select p_id from B WHERE p_id != '')

点赞(1) 打赏

评论列表 共有 2 条评论

令狐冲 4年前 回复TA

@alan 当然可以在前期架构规划的时候避免出现这种情况;我这只是个例子,告诉如果想这样操作的一个sql思路。

alan 4年前 回复TA

当初建表时应当属性 唯一啊 老哥我是个新手 别喷我

意见
建议
发表
评论
返回
顶部