嵌套集模型查询选择父节点内的节点

问题描述:

我有一个嵌套集模型如下。嵌套集模型查询选择父节点内的节点

HOME 
    MUSIC 
    GUITAR 
    KEY BOARD 
    RADIO 

    FURNITURE 
    BDD 
    TABLE 

    BOOKS 
    BIBLE 
    Godfather 

我的问题是查询如何显示父级的子元素? 例如。

列表MUSIC, FURNITURE, BOOKS母公司为HOME 列表GUITAR,KEY BOARD, RADIO母公司为MUSIC

我曾尝试下面的查询

select * from elements where lft between 1 and 22 order by lft asc 

选择第一父母的孩子,但它返回整个列表。

任何人都可以帮我吗?

在此先感谢

表结构看起来像

-------+-------------------+------------+---------- 
id  |  cat_name  | lft  | rgt 
-------|-------------------+------------+---------- 
1  |  HOME  | 1  | 22 

这会给你想要的东西:

SELECT 
    c.cat_name 
FROM 
    tree_struc t 
JOIN 
    tree_struc c 
    ON c.lft BETWEEN t.lft + 1 AND t.rgt - 1 
LEFT JOIN 
    tree_struc a 
    ON a.lft BETWEEN t.lft + 1 AND t.rgt - 1 
    AND c.lft BETWEEN a.lft + 1 AND a.rgt - 1 
WHERE t.cat_name = 'Music' AND a.id IS NULL; 

SQL Fiddle

+0

感谢您的回复。这个查询是否适用于任何深层结构? – ramesh 2014-09-27 16:30:06

+0

是的,小提琴的例子是与家庭,但音乐或书籍也会给出正确的结果。如果您需要更多解释,请随时询问 – Gervs 2014-09-27 17:24:37

+0

感谢您的工作......我会在这里评论如果有任何疑问 – ramesh 2014-09-27 17:26:29

在我看来,最好的办法是做到以下几点,使用:p_parent_id作为替代变量,其中包含类别的ID ,要检索的孩子:

select * from elements where parent_id = :p_parent_id 
+0

感谢您的回复。但我与parent_id混淆。有问题更新了我的表格结构。你能检查吗? – ramesh 2014-09-27 06:49:42

+0

你在说这里的邻接表,OP有一个嵌套集。 – Alternatex 2017-06-13 18:56:20