在关系数据库中检索链表的条目 [英] Retrieving entries of linked list in relational database

查看:0
本文介绍了在关系数据库中检索链表的条目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于我的项目,我使用RDBMS实现了链表。链表使用rowid列作为指针,并包含前一个、下一个和所有者指针(来自不同的表)。

简单的示例如下所示。

   CREATE TABLE EMPLOYEE
   (
       EMP_ID           NUMBER(4) NOT NULL,
       OFFICE_CODE      CHAR(2),
       OFF_EMP_prior    ROWID,
       OFF_EMP_next ROWID,
       OFF_EMP_owner    ROWID
   );

{EMP1,(NULL,EMP2,OFF1)} - {EMP2,(EMP1,EMP3,OFF1)} - {EMP3,(EMP2,NULL,OFF1)}

现在我必须实现一个检索函数,如"查找‘off1’为所有者的列表的‘n(整数)’项"。

这可以通过使用循环遍历链表来简单地完成。但是,对于一次检索来说,这需要太多的SQL操作。(我知道使用序列号可以是另一种选择,但这是到目前为止所做的决定。)

相反,我在Oracle SQL中找到SELECT - CONNECTED BY,并尝试

select * from EMPLOYEE
where OFF_EMP_owner = [OFF_ROWID]
connect by nocycle OFF_EMP_prior = rowid;

此查询用于检索列表的条目,但结果的顺序与我预期的不同(类似于EMP3-EMP1-EMP2)。

是否可以使用SELECT-CONNECT BY'检索链表的条目并按列表的顺序对它们进行排序?或者是否存在更合适的SQL?

推荐答案

select * from EMPLOYEE
where DEPT_EMPLOYEE_owner = [OWNER_ROWID}
start with OFF_EMP_prior is NULL
connect by OFF_EMP_prior = prior rowid;

使用上面的查询解决了问题。应使用"之前"而不是"nocle"。

这篇关于在关系数据库中检索链表的条目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆