MySQL SQL001- 重复记录的处理

本文介绍如何使用SQL在数据库中建立测试环境、查询及删除重复记录的方法。首先通过创建书籍信息表并导入测试数据,接着利用SQL语句找出重复记录,并提供两种删除重复记录的方式:一种是直接删除除最小ID外的所有重复项;另一种是通过创建临时表存储唯一数据后再移回原表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、建立测试环境

1.1. 建立表格

CREATE TABLE books (
  book_id INT AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(50),
  pub_year VARCHAR(4),
  author VARCHAR(50)
);

1.2. 建立测试数据文件,books.txt,其内容如下

1,王国维词新释辑评,2006,叶嘉莹
2,王国维词新释辑评,2006,叶嘉莹
3,王国维词新释辑评,2006,叶嘉莹
4,南唐二主词新释辑评,2003,杨敏如
5,南唐二主词新释辑评,2003,杨敏如
6,朱自清说诗,1998,朱自清

1.3. 装入数据

LOAD DATA INFILE 'c:/books.txt' INTO TABLE books FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';

1.4. 查询结果


 二、查询重复(只有重复)的记录

2.1 方法一

mysql> SELECT m.* 
       FROM books m ,
           (SELECT MIN(book_id) book_id 
                           FROM books 
                       GROUP BY title
                         HAVING count(1) > 1)n
      WHERE m.book_id = n.book_id

 

 

三、删除重复的记录

3.1 方法一

DELETE books as m FROM books m ,
         (SELECT title,MIN(book_id) book_id 
                         FROM books 
                     GROUP BY title
                       HAVING count(1) > 1)n
    WHERE m.book_id > n.book_id and m.title = n.title

 

3.2 方法二

-- 创建数据未重复的临时表 
CREATE TEMPORARY TABLE tmp_books select * from books group by title having count(1) >= 1;
-- 清除原有的数据资料 
TRUNCATE TABLE books;
-- 将临时表的数据插入正式表中 
INSERT INTO books SELECT * FROM tmp_books;
-- 删除临时表 
DROP TABLE tmp_books
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值