例1-2.键值重复的信息
现在看一下压缩掉重复信息的product表 【程序编程相关:ORACLESQL性能优化系列(十三)】 【推荐阅读:ORACLESQL性能优化系列(十四)完】id pname price number pdescription 【扩展信息:ORACLESQL性能优化系列(十二)】 1apple 123000null 2banana 16.997600null 3olive 25.224500null 4coco nut 40.992000null 4orange 15.995500null 5pineapple 302500null 6olive 25.223000null这里还有几个有问题的地方.表中coco nut与orange的id都是4,id号为3与6的两种商品的品名(pname)都是olive.而我们的原意显然是想要让每一种商品对应一个id号,而且表中的id号与pname都应该是唯一的.这个表中只有7行,我们可以直接观察,用肉眼发现问题,表中数据量很大时呢?
现在我们回顾一下例1中查询重复数据的语句.我们用 …… group by id, pname, price, number, pdescription 对数据集进行了分组,并用 having count(*) > 1 过滤出了重复的数据,依此类推,单独对id列进行分组与过滤,能否找出id重复的数据呢?试一试: select id from product group by id having count(*) > 1 返回结果: id ----------- 4 这样倒是出现了我们所要的id号,可这种报表实在没什么实际意义,现在我们查一下这个id到底是谁: select id, pname, price, number, pdescription from product group by id having count(*) > 1 这条语句执行出错,很显然,id号之后的四列既不在group by中,也是统计函数,它们不应该出现在这里.而这样的语句: select id, pname, price, number, pdescription from product group by id, pname, price, number, pdescription having count(*) > 1 返回的是一个空结果集: id pname price number pdescription ----------- -------------------- --------------------- ----------- ------------------------------------
(所影响的行数为 0 行)
很多朋友用子查询 ... 下一页