如何解决ACCESS中select TOP语句返回全部记录问题?
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
我一直以为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 编辑过
|
关键字查询
相关文章
正在查询... |