sql查询重复数据

样例:有一个书籍表 t_book , 查询 表中重复的书籍数据
sql查询重复数据_第1张图片

方式1 使用分组(group by having)

先使用 group by 对数据分组,再使用 having 统计出分组中计数大于 1 的分组,此分组中的数据即为重复的数据

SELECT `name`,price,author,sales,stock,img_path FROM t_book 
GROUP BY `name`,price,author,sales,stock,img_path
HAVING COUNT(1) > 1

方式2 使用 join 内连接

使用 join 将一个表自己与自己相连接,连接条件on 是除id外,a表的字段数据和b表的字段数据全部相等,再使用where 筛选不满足条件是数据 a.id != b.id
最后使用 DISTINCT 过滤重复数据,的到的就是重复的数据
(如果表中不存在重复数据那 on的连接条件只会使相同的数据本身自连接,再经过where条件,查询出来的一定是空值)

SELECT DISTINCT b1.`name`,b1.price,b1.author,b1.sales,b1.stock,b1.img_path 
from t_book b1 JOIN t_book b2 on 
b1.`name` = b2.`name` and b1.price = b2.price and 
b1.author = b2.author and  b1.sales = b2.sales and 
b1.stock = b2.stock and b1.img_path = b2.img_path 
WHERE b1.id != b2.id

方式3 使用where (将join的连接改为 where 的方式)

SELECT DISTINCT b1.`name`,b1.price,b1.author,b1.sales,b1.stock,b1.img_path
from t_book b1,t_book b2 
WHERE b1.`name` = b2.`name` and b1.price = b2.price 
and b1.author = b2.author and  b1.sales = b2.sales 
and b1.stock = b2.stock and b1.img_path = b2.img_path 
and b1.id != b2.id

你可能感兴趣的:(笔记,sql,数据库)