当前位置:数据库 > Oracle >>

oracle 重复列的问题

现在有一个表t1, 有字段 a1,a2,a3,a4,其中a1是主键,a2不为空, a3,a4可以是空,现在要找出t1中a2,a3,a4 内容相同的数据 select sum(num) from ( select a2,a3,a4,count(*) num from t1 group by a2,a3,a4 ) having num>1; 这样我查出数据时1089条, 然后我又用了一个 select f1.* from t1 f1, t1 f2 where f1.a2=f2.a2 and nvl(f1.a3,0)=nvl(f2.a3,0) and nvl(f1.a4,0)=nvl(f2.a4,0) ; 这样我查出来是1132条,比那种多了几条,第一种方法应该是正确的重复的总数,为什么下面的方法会多了几条? 是因为a3,a4 可以有空值的问题.但是我用nvl处理了啊,然后我查了一下第二种方法的数据,发现有一些 他只有一条,但是查询结果也在里面.并没有重复. why???????\ 谁来解释下,我这里哪来有疑问?
答案:很明显啊
select f1.* from t1 f1, t1 f2 where f1.a2=f2.a2 and  nvl(f1.a3,0)=nvl(f2.a3,0) and  nvl(f1.a4,0)=nvl(f2.a4,0) ;
你这句SQL里面不重复的也会显示出来,你的F1和F2都是T1这张表,那么 f1.a2=f2.a2 and  nvl(f1.a3,0)=nvl(f2.a3,0) and  nvl(f1.a4,0)=nvl(f2.a4,0) 不就是必然能找到一条吗?
其他:第二句中 f1.a2=f2.a2  这个有问题,a1才是主键,要关联两张表应该是用a1关联才会有唯一的记录,这样查出来就不会有以上的问题。 怎么一个像统计“重复后”的重复条数,下面一个又怎么理解?
假设T1的R5、R6行重复,自然F1、F2表的R5、R6也重复,
不管关联字段是否有null,你且想想这样关联后的结果是怎么样的?明白了吧 请问a2列是否有重复?如果a2有重复查询出来肯定要多一些! 如果用
select f1.*
   from t1 f1, t1 f2 
 where f1.a1=f2.a1 
   and  nvl(f1.a3,0)=nvl(f2.a3,0) 
   and  nvl(f1.a4,0)=nvl(f2.a4,0) ;
查询就会避免所述问题 

上一个:oracle 创建包的时候错误 求解
下一个:oracle 中如何查处2星期前的数据

Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,