LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

如何解决ACCESS中select TOP语句返回全部记录问题?

admin
2012年2月12日 1:3 本文热度 2619
我一直以为access的sql语句与sql server差不多,当时也使用 select top n在access测试过,都是成功的,但昨天突然发现access中有个问题:[br] 如果在查询top语句的后面使用order by,而且order by字段中有重复值的话,那么这个top很可能会失效,[br]会返回所有记录[br]比如:[br]
[img]http://www.cnblogs.com/images/outliningindicators/none.gif[/img][color=#000000] [/color][color=#0000ff]select[/color][color=#000000] [/color][color=#0000ff]top[/color][color=#000000] [/color][color=#800000][b]5[/b][/color][color=#000000] [/color][color=#0000ff]from[/color][color=#000000] news [/color][color=#0000ff]order[/color][color=#000000] [/color][color=#0000ff]by[/color][color=#000000] createdate[/color]
[p]如果createdate中有重复值,那么很有可能会显示出所有的记录来,此top功能会失效的[br]但如果createdate中无重复值,那么top功能还是有效的[br][br]因此,在access中使用top功能要注意一下order by的字段是否会有重复值,如果象createdate是"年-月-日 时:分:秒"的,那基本上问题不大的。[br]但为了保险起见,我们也可以采用“加入主键”的方式:[br][/p]
[img]http://www.cnblogs.com/images/outliningindicators/none.gif[/img][color=#000000] [/color][color=#0000ff]select[/color][color=#000000] [/color][color=#0000ff]top[/color][color=#000000] [/color][color=#800000][b]5[/b][/color][color=#000000] [/color][color=#0000ff]from[/color][color=#000000] news [/color][color=#0000ff]order[/color][color=#000000] [/color][color=#0000ff]by[/color][color=#000000] createdate [/color][color=#0000ff]desc[/color][color=#000000],id [/color][color=#0000ff]desc[/color]
[p][br]用主键作“不可能重复”的保障就可以防止此问题出现了!![br][br]希望这对某些朋友有用!![br][br]在网上找到一个相关的解释:[br][hilitecolor=#c0c0c0]jet sql不是 t-sql语句。[br]jet sql 会返回重复值,也就是说,一个表中如果 order by 的字段都是 0 ,一共有100条记录,即使你用select top 1 来返回记录,也同样返回100条记录,因为 jet db 无从在这100条记录里面判断先后次序,只能返回100条。要解决此问题可以在后面加入一个主键字段[/hilitecolor][/p]

该文章在 2012/2/12 1:03:06 编辑过

全部评论1

admin
2012年2月12日 1:4
strSQL="SELECT TOP 5 * FROM myarti WHERE issubfile=1 ORDER BY hits DESC" 如上语句,执行后查询的结果是6条 strSQL="SELECT TOP 4 * FROM myarti WHERE issubfile=1 ORDER BY hits DESC" 把5该成4,,执行后查询的结果是4条 这是sql转成access后出现的问题,在sql server中没有这样的问题,这是怎么回事??? 答:你的记录集的HITS字段中含有相同的记录, 改为select top 5 * from myarti where issubfile=1 order by hits desc,id desc 其中ID为表主键! 解释:如果在查询TOP语句的后面使用Orderby,而且Order by字段中有重复值的话,那么这个TOP很可能会失效, 会返回所有记录 比如: select top 5 from News order by createDate 如果createDate中有重复值,那么很有可能会显示出所有的记录来,此TOP功能会失效的 但如果createDate中无重复值,那么TOP功能还是有效的 因此,在ACCESS中使用TOP功能要注意一下orderby的字段是否会有重复值,如果象createDate是"年-月-日时:分:秒"的,那基本上问题不大的。 但为了保险起见,我们也可以采用"加入主键"的方式: select top 5 from News order by createDatedesc,id desc 用主键作"不可能重复"的保障就可以防止此问题出现了!!
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved