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

 一,对于部门表部门编号重复的数据,进行相关操作

-- 先查看部门信息原表的数据
select * from t_dept;

MySQL对某个字段重复数据的查询,删除,与合并_第1张图片

-- 查询出所有d_no有重复的数据(没有重复的不显示,即104在表中只有一条,所以不显示)
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);

MySQL对某个字段重复数据的查询,删除,与合并_第2张图片

-- 查询出所有d_no有重复的数据(只显示多余的那几条,比如101和103表中一共有三条,只显示多余的两条,同样102有两条,那么只显示多余的那一条)
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);

MySQL对某个字段重复数据的查询,删除,与合并_第3张图片

-- 删除表中d_no重复的数据,只留一条
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);

 二,对于故障信息表将相同设备的问题信息合并成一条

-- 先查看故障信息原表的数据
select * from t_fault;

MySQL对某个字段重复数据的查询,删除,与合并_第4张图片

-- 将故障等级和故障信息拼接在一起(CONCAT_WS()函数)
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 

MySQL对某个字段重复数据的查询,删除,与合并_第5张图片

-- 将故障信息和故障等级拼接在一起(这里使用CONCAT_WS()函数),并将编号名称相同的产品合并成一条(这里使用GROUP_CONCAT()函数)
select tab.f_no,tab.f_name,GROUP_CONCAT(tab.f_msg SEPARATOR ';') goup_msg from 
(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 
group by tab.f_no,tab.f_name

MySQL对某个字段重复数据的查询,删除,与合并_第6张图片

你可能感兴趣的:(MySQL)