2016-08-25 6 views
1

からのフルパスを取得しますtblMappingSQLクエリは、私は、ツリー構造のテーブルを持っている、と私は要素の完全なパスを見つける必要があるが、同じ時間に、要素が私は1つのテーブルを持っている</p> <p>権限によって制限されているノード

map_id name  parent_id 
1  Root  0 
2  Child 1 1 
3  Child 2 1 
4  Child 3 3 
5  Child 4 4 
6  Child 5 5 

そしてtblPerms表:私は、次のCTEクエリを使用しています

perm_id map_id 
1  5 
2  6 

CTEのクエリは、私が持っているしたいと思いますどのような似 Child 4.Child 5

に私にパスを与えること

;WITH Hierarchy (map_id, name, parent_id, Path) 
AS 
(
    SELECT 
     t.map_id, t.name, t.parent_id, 
     CAST(t.name AS varchar(max)) 
    FROM 
     tblMapping t 
    LEFT OUTER JOIN 
     tblMapping t1 ON t1.map_id = t.parent_id 
    LEFT OUTER JOIN 
     tblPerms t2 ON t2.map_id = t1.map_id 
    WHERE 
     t1.map_id IS NULL 

    UNION ALL 

    SELECT 
     t.map_id, t.name,t.parent_id, 
     CAST(h.Path + '.' + t.name AS varchar(max)) 
    FROM 
     Hierarchy h 
    INNER JOIN 
     tblMapping t ON t.parent_id = h.map_id 
) 
SELECT Path 
FROM Hierarchy 
WHERE Path is not null 
OPTION (MAXRECURSION 0) 

は許可が設定されていない場合でも、要素の完全なパスを持つことができるようにすることです:Root.Child 1.Child 3.Child 4.Child 5

このリクエストを解決するにはどうすればよいですか?

ありがとうございました!

+0

をチェック - あなたが今持っているクエリは、のみルートレコードを返します。あなたはChild 4とChild 5のパーミッションを持っているように見えますが、中間ノードにはパーミッションがないため結果に表示されませんが、フルパスのクエリでChild 4とChild 5だけを見ることができるようにしたい?ルートはどうですか?権限がないので、ルートが表示されますか? – SMM

+0

はい、確かにCTEを変更します – rosuandreimihai

+1

@Sergは実用的な解決策を持っています – SMM

答えて

3

最初のビルド・パスは、単に明確に権限

WITH Hierarchy (map_id, name, parent_id, Path) 
AS 
(
    SELECT 
     t.map_id, t.name, t.parent_id, 
     CAST(t.name AS varchar(max)) 
    FROM 
     tblMapping t 
    LEFT OUTER JOIN 
     tblMapping t1 ON t1.map_id = t.parent_id 
    WHERE 
     t1.map_id IS NULL 

    UNION ALL 

    SELECT 
     t.map_id, t.name,t.parent_id, 
     CAST(h.Path + '.' + t.name AS varchar(max)) 
    FROM 
     Hierarchy h 
    INNER JOIN 
     tblMapping t ON t.parent_id = h.map_id 

) 
SELECT Path 
FROM Hierarchy h 
JOIN tblPerms t2 ON t2.map_id = h.map_id 
WHERE Path is not null 
OPTION (MAXRECURSION 0); 
+0

ありがとうございました!これは完璧に機能しました! – rosuandreimihai

関連する問題