背景
突然发现博客列表页会出现重复的项,原以为是程序BUG(数据多储存了)。经检查发现 是SQL查询结果出现重复项
1 | SELECT |
数据库
显示结果
解决办法
当时直接想到的是加DISTINCT
进行去重,效果确实能够达到且立竿见影,除此之外,也可以在语句末尾添加group by b_id来实现同样的效果。
但是不能只知其然,后来发现,是自己join的表没有关联主键
或者说是value唯一
性的字段。
通过对该表以该字段查询后发现确实存在两行数据,换言之,如果在c表中查询该字段对应的数据后
即SELECT * FROM c WHERE c.network_id = '123456789'
结果显示数据有n行,那么根据笛卡尔积,left join 将会产生m * n条数据,会重复n倍。
原文连接
DISTINCT
从表中查询数据时,可能会收到重复的行记录。为了删除这些重复行,可以在SELECT语句中使用
DISTINCT
子句
DISTINCT
子句的语法如下
1 | SELECT DISTINCT |
MySQL DISTINCT语句
背景
突然发现博客列表页会出现重复的项,原以为是程序BUG(数据多储存了)。经检查发现 是SQL查询结果出现重复项
1 | SELECT |
数据库
显示结果
解决办法
当时直接想到的是加DISTINCT
进行去重,效果确实能够达到且立竿见影,除此之外,也可以在语句末尾添加group by b_id来实现同样的效果。
但是不能只知其然,后来发现,是自己join的表没有关联主键
或者说是value唯一
性的字段。
通过对该表以该字段查询后发现确实存在两行数据,换言之,如果在c表中查询该字段对应的数据后
即SELECT * FROM c WHERE c.network_id = '123456789'
结果显示数据有n行,那么根据笛卡尔积,left join 将会产生m * n条数据,会重复n倍。