编写SQL查询以获取邻居行

时间:2011-07-12 06:37:26

标签: sql

我在编写查询以获取邻居行时遇到了一些问题,并且不知道如何处理它。

这是场景(目前不是纯粹使用SQL实现,而是SQL和Java实现的混合):

有一个实体A有1000个实体B,每个实体B有1000个实体C,每个实体C有1000个实体D.我们需要使用存储在D中的信息。首先我们有一个查询来获取所有实体实体A中的Ds。然后我们实现一些逻辑,以便我们可以从特定的D导航到下一个D或之前的D,但是这个逻辑不是作为SQL查询编写的。

问题1

如果我想将导航逻辑实现为SQL查询,如何在选择查询中转到下一个D?假设原始查询就像

一样简单
select * from D 
  inner join C where C.ID = D.FK
  inner join B where B.ID = C.FK

我正在寻找适用于Oracle和SQL Server的通用解决方案。

问题2

我如何知道当前行的位置(在上述查询的结果中)。例如,如果我想实现一些逻辑,例如“这是Y的X号”。

对于那些对邻居行感到困惑的人,我指的是我们从上面的查询得到的每一行的上一行或下一行。结果查询可能与上面的查询完全不同,但是你明白了,我可以使用JAVA在整个实体A中指定特定D的位置,但我不知道如何使用SQL。

1 个答案:

答案 0 :(得分:1)

如果您使用的是Oracle,请查看LEAD和LAG关键字,它们允许您选择包含之前或之后行的信息。