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?
rowid是一個不錯的選擇;你應該鏈接/連接到自然或代理鍵。通常,在(遞歸)中,具有* parent *指針的SQL是可能的,但在大多數情況下,從建模的角度來看,它是次優的。 – wildplasser
它取決於你使用的是哪個數據庫環境,如果它是SQL Server,我會建議使用公用表表達式。 – ydoow
順便說一句:你的*表*沒有主鍵,所以它甚至不是一張表(在2NF意義上) – wildplasser