数据库查重



如上一张表,有没有办法筛选出book重复的记录并删除呢?虽然SQL的distinct聚合函数可以将查询清单中的重复记录剔除,每种记录值只返回其中的一条记录,但是它不能针对单个字段查重,如果使用"Select distinct book,id,author,price from t1"并非只查询book字段重复,而是作用于所有字段,只有当book,id,author,price几个字段都相同时才被认为是相同的记录。实际中我们通常需要针对一两个字段进行查重,显然用distinct关键字是行不通的。

SQL的Group by子句可以根据数据库每一列的内容对查询结果进行分类,那我们能不能利用这个子句呢?通过构造SQL语句我们可以得到无重复记录的ID,SQL语句如下:Select max(id) from t1 group by book,这边的max函数作用是在重复记录中选择ID值最大的记录,将其改为min亦有相同的效果。现在我们就可以利用嵌套查询来达到我们要的效果,完整SQL语句:Select * from t1 where id in(Select max(id) from t1 group by book),执行查询后视图如下:



如果要将重复记录删除只须更改下SQL语句,完整SQL语句:Delete * from t1 where id not in(Select max(id) from t1 group by book)。

对于书目查重仅仅靠书名相同来判断是不行的,除了书名相同外,还得依据书的作者以及出版社是否相同进行判断,也就是得针对两个或三个字段进行查重,要实现也不难,只须对多个字段进行分组即可,完整SQL语句如下:Select * from t1 where id in(Select max(id) from t1 group by book,author),数据表视图如下:



评论: 1 | 引用: 0 | 查看次数: 5372
发表评论
登录后再发表评论!