select count(*) from 表 where no=a.no)>1
相同的记录数大于1

解决方案 »

  1.   

    select * from 表 a
    where (select count(*) from 表 where no=a.no)>1这是两层查询
    select count(*) from 表 where no=a.no 
    是子查询,为说明方便,该查询叫查询b,而另一层的查询叫查询a处理的步骤可以这样理解.
    查询a,扫描表中的第一条记录,此时no,确定.
    然后判断条件,即执行子查询b
    select count(*) from 表 where no=a.no  --此时的a.no就等于查询a中的那个no这时就自然可以统计出一个结果来,再判断结果是否>1
    如果是,则满足条件,该条记录送入结果集中
    如果条件不满足,则该条记录丢弃然后查询a继续扫描下一条记录,重复做上述判断处理,直到扫描完整个表
      

  2.   

    select count(*) from 表 where no=a.no我就是对这句十分的不解。我的理解是这句的结果是算出a.no=b.no的行数值。而在没有group by语句的情况下用 >1 的 逻辑判断   就能筛选出no 有重复的 数据。这点就十分困惑了。关键是我现在不理解select count(*) from 表 where no=a.no 在这个运行过程中。到底返回出来的是什么样的数据?我以前写的重复数据选择的sql语句一般是这样写的
    select no,count(*)
       from 表  a
         group by no
            having count(no)>1  但是这样的语句只能返回
    no,数字
    的结果
    不能返回全部的字段。
    邹建  能再在指点一二?
    先行拜谢
      

  3.   

    老大在2楼说的挺明白的了:
    select count(*) from 表 where no=a.no  --此时的a.no就等于查询a中的那个no
    这时就自然可以统计出一个结果来,再判断结果是否>1
    如果是,则满足条件,该条记录送入结果集中
    如果条件不满足,则该条记录丢弃也就是在no不重复时,不输出到结果集,不满足条件,no重复时满足条件,输出到结果集。
      

  4.   

    count(*)和count(no)的结果是一样的,因为你要对no进行判断,所以不考虑no=null的情况
    --不然你理解这句吧,一样效果
    select a.* from 表 a join(
        select no from 表 a group by no having count(no)>1  
    )b on a.no=b.no
      

  5.   

    --查询no重复的记录
    select * from 表 a
    where (select count(*) from 表 where no=a.no)>1--查询no不重复的记录
    select * from 表 a
    where (select count(*) from 表 where no=a.no)=1