邹建 能进来下么?

selila 2004-07-13 06:01:06
http://community.csdn.net/Expert/topic/3170/3170054.xml?temp=.4206201
中你的这句写得很简练。不象我写的容易出错。效率也很好

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


可是我看了很久一直对这种用法看不太明白。你若有空能帮忙解释一下吗?特别是(select count(*) from 表 where no=a.no)>1 不明白为什么能这么用

...全文
106 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangzs8896 2004-07-14
  • 打赏
  • 举报
回复
--查询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
zjcxc 元老 2004-07-14
  • 打赏
  • 举报
回复
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
zhangzs8896 2004-07-14
  • 打赏
  • 举报
回复
老大在2楼说的挺明白的了:
select count(*) from 表 where no=a.no --此时的a.no就等于查询a中的那个no
这时就自然可以统计出一个结果来,再判断结果是否>1
如果是,则满足条件,该条记录送入结果集中
如果条件不满足,则该条记录丢弃

也就是在no不重复时,不输出到结果集,不满足条件,no重复时满足条件,输出到结果集。


zjcxc 元老 2004-07-14
  • 打赏
  • 举报
回复
已经说了是两层查询,第一层查询逐条扫描全表

每扫描一条记录,就执行子查询,还有什么不能判断的?
selila 2004-07-14
  • 打赏
  • 举报
回复
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,数字
的结果
不能返回全部的字段。


邹建 能再在指点一二?
先行拜谢
zjcxc 元老 2004-07-13
  • 打赏
  • 举报
回复
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继续扫描下一条记录,重复做上述判断处理,直到扫描完整个表

pbsql 2004-07-13
  • 打赏
  • 举报
回复
select count(*) from 表 where no=a.no)>1
相同的记录数大于1

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧