0
我正在使用MySQL 5.5
。假設我有一個具有「N-森林」結構如下的SQL表:帶有「森林」結構的表上的SQL查詢
create table foo
(
id int not null primary key,
parent_id int,
bar varchar(255),
foreign key (parent_id) references foo (id)
)
parent_id
如果是null
它表示一個根元素。我們也保證它是非循環的。
我現在想id
@x
及其所有子(即含有ID @x和遞歸是在這個組中的任何PARENT_ID一行行的集)預排序來選擇行:
select * from foo where parent_id=DescendantOf(@x) sort by Preorder
可以使用什麼SQL語句? (如果需要修改表結構允許)
此外,我想找到一個給定元素的根ID:
select RootOf(@x) from foo
我怎麼能這樣做?
MySQL可以有效處理這個問題,還是需要維護我自己的索引或輔助表?
其實它不僅是Oracle。許多主要的數據庫管理系統(Oracle,PostgreSQL,Firebird,DB2,SQL Server,Teradata)現在都通過「*遞歸公用表表達式*」支持分層查詢* –
@a_horse_with_no_name你是絕對正確的......我剛剛提到Oracle,由Oracle ... – Yahia