私はA、B、C、Dからなる階層構造を持っています。各エンティティは、その子に対して 1 対多の関係を持っています (A -> 1:N -> B -> 1:N -> C -> 1:N -> D)。別のエンティティがあります。それを X と呼びましょう。フィールドを使用し
てこれらの階層エンティティの 1 つにリンクできます (は A、B、C または D への外部キーであり、名前を含むルックアップ テーブルへの外部キーです) A、B、C および D の)LevelID
LevelTypeID
LevelID
LevelTypeID
提供されたLevelID
とLevelTypeID
に基づいて、現在の階層エンティティと上位の親レベルのエンティティを取得できるクエリが必要です。
以下は、4 つのテーブルのサンプル データです。
A
ID
--
1
B
ID A_ID
---- -----
10 1
C
ID B_ID
---- -----
100 10
D
ID C_ID
----- -----
1000 100
1001 100
LevelId = 100、LevelTypeId = 3 (C) を使用すると、クエリは次を返す必要があります。
LevelTypeId LevelId
----------- -------
3 100
2 10
1 1
LevelId = 1000、LevelTypeId = 4 (D) を使用すると、クエリは次を返す必要があります。
LevelTypeId LevelId
----------- -------
4 1000
3 100
2 10
1 1
以下のクエリを使用していましたが、特にLevelId = 100、LevelTypeId = 3 でフィルタリングすると、正しい結果が得られません。
select LevelTypeId, LevelId
from
( select
a.ID as [1],
b.ID as [2],
c.ID as [3],
d.ID as [4]
from A a
left join B b on a.ID = b.A_ID
left join C c on b.ID = c.B_ID
left join D d on c.ID = d.C_ID
where
(@levelTypeId = 4 and D.ID = @levelId)
or
(@levelTypeId = 3 and C.ID = @levelId)
or
(@levelTypeId = 2 and B.ID = @levelId)
or
(@levelTypeId = 1 and A.ID = @levelId)
) p
unpivot
(LevelId FOR LevelTypeId IN ([1], [2], [3], [4])) AS unpvt
誰でもこのクエリで私を助けることができますか?