是否可以模拟以下MySQL查询:
SELECT * FROM `tbl` ORDER BY `date` DESC LIMIT X, 10
(X是参数)
在MS Access?
Ste*_*sen 12
虽然Access/JET TOP关键字不直接提供OFFSET功能,但我们可以使用TOP子查询和"派生表" 的巧妙组合来获得相同的结果.
以下是在Name和Id中的Person表中从偏移量20开始获取10行的示例...ORDER BY 
SELECT Person.*
FROM Person
WHERE Person.Id In 
      (
        SELECT TOP 10 A.Id
        FROM [
               SELECT TOP 30 Person.Name, Person.Id
               FROM Person
               ORDER BY Person.Name, Person.Id
             ]. AS A
        ORDER BY A.Name DESC, A.Id DESC
      )
ORDER BY Person.Name, Person.Id;
基本上,我们查询前30个,反转顺序,查询前10个,然后从表中选择匹配的行,再次按顺序排序.这应该是相当有效的,假设Id是PRIMARY KEY,并且Name上有索引.可能是Name,Id上的特定覆盖索引(而不是名称上的一个)才能获得最佳性能,但我认为索引隐含地覆盖了PRIMARY KEY.
另一种方式 - 假设您希望在名为 table1 的表中包含 1000 到 1999 条记录(当然,如果您有那么多记录),您可以执行以下操作。
MSSQL
SELECT *
    FROM table1 LIMIT 1000, 1999;
微软访问
SELECT TOP 1000 * 
FROM table1 
Where ID NOT IN (SELECT TOP 999 table1.ID FROM table1);
打破这个
SELECT TOP NumA * 
FROM table1 
Where ID NOT IN (SELECT TOP NumB table1.ID FROM table1);
UpperLimit = 1999
LowerLimit = 1000
NumA = UpperLimit - LowerLimit + 1
前任。1000 = 1999 - 1000 + 1
NumB = LowerLimit -1
前任。999 = 1000 - 1
| 归档时间: | 
 | 
| 查看次数: | 12484 次 | 
| 最近记录: |