MySQL duplicate data related operations (including the case where the primary key table does not exist)

This article explains the operation MySQL duplicate data, divided into query and delete duplicates operating table (table containing case there is no primary key). In order to explain the method of operation and intuitive, a student here at the table as a case study to demonstrate, to increase the data source as follows:

/*建立学生表。*/
CREATE TABLE `student_info` (
  `id` INT(10) NOT NULL AUTO_INCREMENT,
  `student_name` VARCHAR(10) DEFAULT NULL,
  `class_no` VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=116 DEFAULT CHARSET=utf8
/*新增数据。*/
INSERT INTO student_info (student_name,class_no) 
VALUES
('张三','一班'),
('李四','一班'),
('钱七','二班'),
('王八','二班'),
('王八','二班'),
('王八','一班')
/*查询学生表是否有重复数据,如果有则展示重复项的其中一条。*/
    SELECT * FROM  student_info GROUP BY student_name,class_no HAVING COUNT(1)>1
/*查询学生表是否有重复数据,如果有则展示所有重复项。*/
    SELECT * FROM student_info WHERE (student_name,class_no) IN(
    SELECT student_name,class_no FROM  student_info GROUP BY student_name,class_no HAVING         COUNT(1)>1
    )
/*查询学生表并过滤重复项。*/
	/*方法一:*/
    SELECT * FROM  student_info GROUP BY student_name,class_no
	/*方法二(DISTINCT前不能有字段):*/
    SELECT DISTINCT student_name,class_no FROM  student_info 
/*删除重复项,保留一条数据(有主键)。*/
	/*方法一:*/
    DELETE FROM student_info WHERE id NOT IN
	(
    SELECT a.id FROM ( 
    SELECT id FROM  student_info GROUP BY student_name,class_no 
    )a
    )
    /*方法二:*/
    DELETE FROM  student_info WHERE id IN(
    SELECT a.id FROM(
    SELECT id FROM  student_info  WHERE (student_name,class_no)IN(
    SELECT student_name,class_no FROM  student_info GROUP BY student_name,class_no HAVING             COUNT(1)>1
    )AND id NOT IN(
    SELECT id FROM  student_info GROUP BY student_name,class_no HAVING COUNT(1)>1)
    )a
    )
/*删除重复项,保留一条数据(无主键)。*/
    /*先删除学生表的主键。*/
    ALTER TABLE `student_info` DROP COLUMN id ;	
    /*第一步:新增主键列(我这里设置的是自增模式)。*/
    ALTER TABLE student_info ADD id INT  AUTO_INCREMENT PRIMARY KEY FIRST;	
    /*第二步:同上面的去重方法。*/
    /*第三步:删除刚才新增的列。*/
    ALTER TABLE `student_info` DROP COLUMN id ;	
		

 

Published 101 original articles · won praise 92 · views 60000 +

Guess you like

Origin blog.csdn.net/qq_39706570/article/details/104087815