嵌套集模型查询选择父节点内的节点
问题描述:
我有一个嵌套集模型如下。嵌套集模型查询选择父节点内的节点
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;
答
在我看来,最好的办法是做到以下几点,使用: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
感谢您的回复。这个查询是否适用于任何深层结构? – ramesh 2014-09-27 16:30:06
是的,小提琴的例子是与家庭,但音乐或书籍也会给出正确的结果。如果您需要更多解释,请随时询问 – Gervs 2014-09-27 17:24:37
感谢您的工作......我会在这里评论如果有任何疑问 – ramesh 2014-09-27 17:26:29