关于数据库内容去重并且留一条重复的

关于数据库内容去重并且留一条重复的
删除书籍名字和作者id都一样的数据,并且在重复的数据中保留一条数据
在这里插入图片描述

方法一是不改变原表,利用group by 的去重效果,创建了一个新的表格

   方法一:
    SELECT * FROM book GROUP BY bookname,authorID ORDER BY bookID
    CREATE TABLE copy_book(
    
    SELECT * FROM book GROUP BY bookname,authorID ORDER BY bookID
    )
    SELECT * FROM copy_book

方法二:改变了原表
思路:
1.找出重复的数据,把它创建成一张表
2.找出重复数据里的最小id作为要保留的数据,并创建成一张表
3.删除book ID在 new_book 中但是不在 new_book 1中的数据
注意点:
亲测
1.一定要将1,2两条里面的语句创建成一张表,因为sql语句不支持在同一张表中筛选出的数据去更新那张表,只能把他们创建成另一张表

2.要注意这个报错Operand should contain * column,这个报错是指缺少列
是因为where的两个条件的列数不相等,要确保where后的条件列数相等

方法二:
CREATE TABLE new_book AS
SELECT * FROM book
WHERE (book.`authorID`,book.`bookname`) 
IN (SELECT authorID,bookname FROM book GROUP BY authorID,bookname HAVING COUNT(*) > 1) 



CREATE TABLE new_book1 AS
SELECT MIN(bookID) FROM book GROUP BY authorID,bookname HAVING COUNT(*) > 1
    


DELETE FROM book WHERE book.`bookID` IN (SELECT bookID FROM new_book)
    AND book.`bookID` NOT IN (SELECT * FROM new_book1);
    SELECT * FROM book;
    ROLLBACK
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值