我在编写查询以获取邻居行时遇到了一些问题,并且不知道如何处理它。
这是场景(目前不是纯粹使用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。
答案 0 :(得分:1)
如果您使用的是Oracle,请查看LEAD和LAG关键字,它们允许您选择包含之前或之后行的信息。