からのフルパスを取得しますtblMapping
SQLクエリは、私は、ツリー構造のテーブルを持っている、と私は要素の完全なパスを見つける必要があるが、同じ時間に、要素が私は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
このリクエストを解決するにはどうすればよいですか?
ありがとうございました!
をチェック - あなたが今持っているクエリは、のみルートレコードを返します。あなたはChild 4とChild 5のパーミッションを持っているように見えますが、中間ノードにはパーミッションがないため結果に表示されませんが、フルパスのクエリでChild 4とChild 5だけを見ることができるようにしたい?ルートはどうですか?権限がないので、ルートが表示されますか? – SMM
はい、確かにCTEを変更します – rosuandreimihai
@Sergは実用的な解決策を持っています – SMM