考慮以下(1:N)
關係:複雜的SQL查詢:選擇像樹遍歷
[entity: user] <------ rid key ------> [entity: rid]
。
考慮兩個表中的數據爲:
select * from user;
user-id rid-key
a-basa a
b-basa b
a.a-basa a.a
a.b-basa a.b
a.a.a-basa a.a.a
a.a.b-basa a.a.b
a.b.a-basa a.b.a
a.b.b-basa a.b.b
a.b.b.a-basa a.b.b.a
a.b.b.b-basa a.b.b.b
select * from rid;
rid-key parent-rid enabled
a null true
b null true
a.a a true
a.b a false
a.a.a a.a true
a.b.a a.b true
a.b.b a.b true
a.b.b.a a.b.b true
......
n rows
我需要設計一個單一查詢(而不是存儲過程),這將輸入user-id
,下面的事實被認爲是:
如果用戶被授予訪問rid
,那麼它也可以訪問給定rid
的parent rid
- 的rid
本身也啓用(enabled = true).
這應該繼續,直到我們到達root rid
,即。 parent rid
財產是null
。
在上面的例子中,訪問擺脫用戶'a.b.b.a-basa'
的名單將是:
a.b.b.a
a.b.b
a.b
和a.a.a-basa
:
a.a.a
a.a
a
我們可以得到使用單個查詢這個名單?任何SQL供應商都很好。
對於這個問題+1,用一個循環,這將是... :)更容易,但無論如何,你需要一個查詢... – bonCodigo
是已知的級別數?如果不是,我不相信這是可能的,因爲SQL不支持遞歸。 – cha
您是否檢查過http://stackoverflow.com/questions/2319284/sql-recursive-query-on-self-refrencing-table-oracle? – obourgain