从索引获取指向行的指针

时间:2013-12-16 18:16:20

标签: sql sql-server

有没有办法从索引获取指向行的指针?或者有更好的方法来做到这一点。让我解释一下......

表:book_type + book_number + page-number上的INDEX的BOOKS。所有这些字段都是char和填充以填充其固定大小。

其他字段包括author,ocr_text和date。

现在我们做了:

select 
   author, 
   ocr_text, 
   date 
from 
   books 
where 
   author='jim' 
   and ocr_text contains 'red oak tree' 
   and between(date, '01/01/2013', '12/15/2013') order by author

...是的我知道一些语法不正确,但无论如何我得到一个与查询匹配的结果集。现在假设我们的结果集有:

Deed Book     | 232 | Page 124    
Deed Book     | 436 | Page 444    
Mortgage Book | 474 | Page 654

请注意,这些结果与查询要求的内容相符...到目前为止没有问题,因为它给了我们预期的结果。

我们的表单包含按钮“FIRST HIT”,“PREV HIT”,“NEXT HIT”和“LAST HIT”,它们遍历上面列表中的匹配查询匹配。 我们的表单还有另外两个按钮“PREV PAGE”和“NEXT PAGE”,模拟书中翻页而不尊重查询结果。换句话说,假设我们首先到达“Deve Book”按钮,我们应该立即向左侧(上一页)看到该页面。另请注意,无论我们按“PREV PAGE”查看的页面总是将我们带到上一页,而按下“NEXT PAGE”将始终将我们带到下一页而不考虑查询结果。我们导航到的这些下一页和上一页可能也可能不在我们的查询结果中,因为它以库顺序导航库而不考虑查询结果。上面提到的索引是库订单索引。

现在,让我们说我们想要在“Deed Book 232 SubPg 1”之前立即查看该页面,假设它存在,或者它可能是“Deed Book 232 Page” 99 SubPg 1“,如果124和99之间没有页面。

我无法想到这允许我从任何给定的地方找到图书馆顺序中的prev行,因为它唯一的关系是“它们在索引中彼此相邻”而没有别的。除了阅读此库索引之外,我无法看到主要/外键或任何其他列关系在新项目不断进入的动态环境中工作。因此,除非有人想出一些东西,我看到这个工作的唯一方法是以某种方式读取库索引以获得指向prev和.or下一行的指针。

是的,我知道SQL Server没有任何记录概念。我来自VFP背景,这种东西很容易......

谢谢,Stanley

1 个答案:

答案 0 :(得分:0)

此类事情通常不需要索引。

的伪:

FIRST HIT = SELECT the MIN(whatever)
PREV HIT = SELECT the MAX(whatever) that is < the CURRENT(whatever)
NEXT HIT = SELECT the MIN(whatever) that is > the CURRENT(whatever)
LAST HIT = SELECT the MAX(whatever)

例如,PREV HIT:

select 
   book,
   max(page)
from 
   books 
where 
   book = @book --(@book is the current book -- passed-in as a parameter)
   and page < @page --(@page is the current page -- passed-in as a parameter)