(主キーテーブルが存在しない場合を含む)MySQLの重複データに関する操作

この記事では、操作のMySQLの重複データに分割説明表操作するクエリと削除の重複(主キーがないテーブル含むケース)。次のようにデータソースを高めるために、実証するためのケーススタディとして、テーブルで操作し、ここで直感的な、学生の方法を説明するために:

/*建立学生表。*/
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 ;	
		

 

公開された101元の記事 ウォン称賛92 ビュー60000 +

おすすめ

転載: blog.csdn.net/qq_39706570/article/details/104087815