翼度科技»论坛 编程开发 mysql 查看内容

mysql如何判断同一字段是否有重复数据

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
mysql判断同一字段是否有重复数据

有时候我们呢会遇到业务问题:判断数据库字段是否含有重复数据?

解决方式

其实很简单,直接写sql语句:
  1. select 字段名 from 表名

  2. group by 字段名

  3. having count(*)>1
复制代码
原因刨析

我们运用group by来进行分组,然后再把分组里大于1条的数据挑出来自然就是重复的数据。

实例展示

1.创建一张表

2.里面有‘张三’这个重复数据,把它挑出来
  1. select name from testname
  2. GROUP BY name
  3. having count(*)>1
复制代码

3.结果是只有'张三'这个结果,得到了重复的数据。

mysql对某个字段重复数据的查询,删除,与合并


1.对于部门表部门编号重复的数据

进行相关操作
  1. -- 先查看部门信息原表的数据
  2. select * from t_dept;
复制代码
  1. -- 查询出所有d_no有重复的数据(没有重复的不显示,即104在表中只有一条,所以不显示)
  2. select * from t_dept td where td.d_no in (select t1.d_no from t_dept t1 group by t1.d_no having count(1) > 1);
复制代码
  1. -- 查询出所有d_no有重复的数据(只显示多余的那几条,比如101和103表中一共有三条,只显示多余的两条,同样102有两条,那么只显示多余的那一条)
  2. ​​​​​​​select * from t_dept td where td.d_id not in (select min(t1.d_id) min_id from t_dept t1 group by t1.d_no);
复制代码
  1. -- 删除表中d_no重复的数据,只留一条
  2. ​​​​​​​delete from t_dept td where td.d_id not in (select tab.min_id from (select min(t1.d_id) min_id from t_dept t1 group by t1.d_no) tab);
复制代码
2.对于故障信息表将相同设备的问题信息合并成一条
  1. -- 先查看故障信息原表的数据
  2. select * from t_fault;
复制代码
  1. -- 将故障等级和故障信息拼接在一起(CONCAT_WS()函数)
  2. ​​​​​​​select tf.f_id,tf.f_no,tf.f_name,CONCAT_WS('-',tf.f_level,tf.f_desc) as f_msg from t_fault tf
复制代码
  1. -- 将故障信息和故障等级拼接在一起(这里使用CONCAT_WS()函数),并将编号名称相同的产品合并成一条(这里使用GROUP_CONCAT()函数)
  2. select tab.f_no,tab.f_name,GROUP_CONCAT(tab.f_msg SEPARATOR ';') goup_msg from
  3. (select tf.f_id,tf.f_no,tf.f_name,CONCAT_WS('-',tf.f_level,tf.f_desc) as f_msg from t_fault tf ) tab
  4. group by tab.f_no,tab.f_name
复制代码


总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源:https://www.jb51.net/database/320710exy.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
来自手机

举报 回复 使用道具