关于数据库内容去重并且留一条重复的
删除书籍名字和作者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