ACCESS的分页之道,Access中实现row_number() over()聚合函数功能
2012-10-31 15:36
519 查看
oracle的分页查询可以利用rowid伪列。 db2的分页查询可以利用row_number() over()聚合函数。 mysql有limit。 access仿佛先天缺陷,仅提供了top n。那如何利用top来实现分页查询呢? 假设在access中有表t1 create table t1( tc1 varchar(50) not null primary key, tc2 varchar(30), tc3 varchar(30) ) 随机插入20条数据。如果以每页5条来显示数据,如果要显示11至15条如何显示?利用top n功能,前11条可以用以下sql完成。 select top 11 tc1,tc2,tc3 from t1 同样前15条也可以这样: select top 15 tc1,tc2,tc3 from t1 想要得到11条到15条,估计一般都会想到差集,但access没提供差集except,可以利用not in实现。 select top 15 tc1,tc2,tc3 from t1 where tc1 not in (select top 10 tc1 from t1) 如果是一个比较大的表,用not in不能利用索引,使和效率极其低下,又该如何呢?可以利用左连接来解决问题 select a.* from ( select top15 tc1,tc2,tc3 from t1) a left join ( select top 10 tc1,tc2,tc3 from t1 ) b on a.tc1=b.tc1 where iif(b.tc1,'0','1')='1' 这种sql的好处是显而易见的,他有效的利用了表的主键索引。当然,由于access不能这样判断b.tc1 is null,所以要改用iif(b.tc1,'0','1')='1' 来曲线救国
相关文章推荐
- SQL2005利用ROW_NUMBER() OVER实现分页功能
- LINQ to SQL 模拟实现 ROW_NUMBER() OVER(ORDER BY ...) 的功能
- SQL 2005的ROW_NUMBER()实现分页的功能
- mysql数据库实现oracle的row_number() over功能
- 用SQL 2005的ROW_NUMBER() 实现分页功能
- 用SQL2005的ROW_NUMBER()实现分页功能
- SQL row_number() over实现分页功能
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能优化
- mysql 实现row_number() over(partition by ) 分组排序功能
- MySQL实现ORALCE的row_number()over(partition by xx)功能
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能
- SQL Server2005使用ROW_NUMBER() OVER实现按分组查询Count()数量排序并分页
- sqlserver2005使用row_number() over分页的实现方法
- MYSQL-实现row_number() over(partition by ) 分组排序功能
- 用SQL 2005的ROW_NUMBER() 实现分页功能
- 用SQL 2005的ROW_NUMBER() 实现分页功能
- SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程(支持单表或多表结查集分页)
- mysql--实现oracle的row_number() over功能
- 用ROW_NUMBER() 实现分页功能
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能优化