1 つのアイテムの完全なツリー パスを提供する SQL クエリが必要です。テーブルは次のようになり、MyItem_MyItemId と MyItemMapping_MyItemId の間には 1:n の関係があります。
テーブル MyItem:
MyItem_MyItemId | MyItem_Title
1 | Desktop
2 | Workspace
3 | Folder1
4 | Folder2
5 | Folder3
6 | Folder4
...
テーブル MyItemMapping:
MyItemMapping_MyItemId | MyItemMapping_MyItemParentId
4 | 3
3 | 2
2 | 1
1 | NULL
5 | 2
6 | 2
...
ここで、"Desktop\Workspace\Folder1\Folder2.
再帰クエリ (以下を参照) で試してみましたが、SQL Server が解決するのに約 10 秒かかります。データベースには 5000 レコードしかありません。このクエリを使用すると、5000 レコードすべてに対してパスが計算されることがわかりますが、必要なのは 1 つのアイテムだけです。誰でも私を助けることができますか?
WITH
MyTable as
(
select MyItem_MyItemId, MyItem_Title, MyItemMapping_MyItemParentId
from MyItem inner join MyItemMapping on MyItem_MyItemId = MyItemMapping_MyItemId
),
RecursiveTable AS
(
select t.MyItem_MyItemId, t.MyItem_Title, t.MyItemMapping_MyItemParentId
from MyTable as t
Where MyItemMapping_MyItemParentId is null
union all
select t.MyItem_MyItemId, CAST(RecursiveTable.MyItem_Title + '\' + t.MyItem_Title AS NVARCHAR(max)), t.MyItemMapping_MyItemParentId
from MyTable as t
JOIN RecursiveTable ON RecursiveTable.MyItem_MyItemId = t.MyItemMapping_MyItemParentId
)
select MyItem_Title from RecursiveTable where MyItem_MyItemid = 4
どうもありがとうございました。
よろしくお願いします。マルク