我用以下SQL语法操作数据库,我是想TOP 8的,也就是获取前8条记录,但运行结果却取了106条记录,也就是把所有记录都获取了。SELECT TOP 8 ID, 节点标识, 写入时间, 上传时间, 数据, 上传信息, 标题 FROM 资料表 WHERE 节点标识 = @节点标识 AND 是否已上传 = @是否已上传 ORDER BY 上传时间以过测试把后面的“ORDER BY 上传时间”删除后就可以获取到8条记录了,这是为什么呀,想来想去也不明白。

解决方案 »

  1.   

    你用的应该是ACCESS吧:jet sql 会返回重复值,也就是说,一个表中如果 ORDER BY 的字段都是 0 ,一共有100条记录,即使你用SELECT TOP 1 来返回记录,也同样返回100条记录,因为 JET DB 无从在这100条记录里面判断先后次序,只能返回100条。要解决此问题可以建立一个自动编号字段(id),然后用改成这样试试:SELECT TOP 8 ID, 节点标识, 写入时间, 上传时间, 数据, 上传信息, 标题 FROM 资料表 WHERE 节点标识 = @节点标识 AND 是否已上传 = @是否已上传 ORDER BY 上传时间,ID
      

  2.   

    我现在才知道JET DB如果无法判断先后次序会返回所有记录的。
      

  3.   

    你这里的ID值应该是自增列吧那样的话你就不用ORDER BY上传时间了直接ORDER BY ID多好呢在ACCESS里ID为自增的新上传一个数据ID 增加一个时间当然也就是最后的那个了
      

  4.   

    看来是楼主没搞清access & sql
      

  5.   

    select top 8 from (SELECT  ID, 节点标识, 写入时间, 上传时间, 数据, 上传信息, 标题 FROM 资料表 WHERE 节点标识 = @节点标识 AND 是否已上传 = @是否已上传 ORDER BY 上传时间)