检索关系数据库

时间:2015-10-19 02:36:22

标签: sql oracle linked-list rdbms

对于我的项目,我使用rdbms实现了链表。链表使用rowid列作为指针,并包含previous,next和owner指针(来自不同的表)。

简单的例子就是这样。

   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)}

现在我必须实现一个类似"查找' n(整数)'的检索功能。具有' OFF1'的列表的输入作为所有者"。

这可以通过使用循环来遍历链表来完成。但这需要太多的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?

1 个答案:

答案 0 :(得分:0)

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

解决了上述查询的问题。应该使用'prior'代替nocycle。