带有“Forest”结构的表上的SQL查询

时间:2012-09-09 14:59:45

标签: mysql sql

我正在使用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_idnull,则表示根元素。我们也保证它是非循环的。

我现在想要选择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能否有效地处理这个问题,还是我需要维护自己的索引或辅助表?

1 个答案:

答案 0 :(得分:0)

AFAIK在MySQL内置中没有这样的功能...... Oracle有一个名为“分层查询”的功能,可以满足您的需求......

在MySQL中您可以实现/模拟它,尽管“如何”相当复杂 - 对于非常好的演练,请参阅this article