我正在使用MySQL 5.5
。假设我有一个具有“N-forest”结构的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的行的集合,以及递归地包含此set中具有parent_id的任何行)在预订中:
select * from foo where parent_id=DescendantOf(@x) sort by Preorder
我可以使用哪种SQL语句? (如果需要,允许对表结构进行修改)
此外,我想找到给定元素的根id:
select RootOf(@x) from foo
我该怎么做?
MySQL能否有效地处理这个问题,还是我需要维护自己的索引或辅助表?
答案 0 :(得分:0)
AFAIK在MySQL内置中没有这样的功能...... Oracle有一个名为“分层查询”的功能,可以满足您的需求......
在MySQL中您可以实现/模拟它,尽管“如何”相当复杂 - 对于非常好的演练,请参阅this article。