本文介紹了在關系數據庫中檢索鏈表的條目的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
對于我的項目,我使用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”。
這篇關于在關系數據庫中檢索鏈表的條目的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,