2014-09-27 95 views
1

我有一個嵌套集模型如下。嵌套集模型查詢選擇父節點內的節點

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 

回答

1

這會給你想要的東西:

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

-1

在我看來,最好的辦法是做到以下幾點,使用: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