私のデータベースのテーブルには、以下のようなデータが保持されています。
TBLlocations
-------------------------------------------------------
LocationId LocationName RegisteredUnder Type
--------------------------------------------------------
LOC100 Location1 0 0
LOC201 Location2 LOC100 2
LOC102 Location3 LOC201 1
LOC302 Location4 LOC201 1
LOC103 Location5 LOC201 1
LOC104 Location6 LOC201 1
LOC105 Location7 LOC104 1
LOC106 Location8 LOC105 1
LOC107 Location9 LOC106 1
ここで、クエリが最初のレベルの場所を返すように、上記のテーブルから場所を選択する必要があります。上記のテーブルを考慮すると、私のクエリは、タイプが「1」の場所を返す必要があり、タイプが「1」の最初のレベルの子の場所である必要があります。上記の表から、ロケーション 3 から 6 は第 1 レベルのロケーションであるため、クエリは次を返す必要があります。
---------------
Location3
Location4
Location5
Location6
「タイプ」の条件を提供する同じテーブルに参加しようとしました。これは私が作成したクエリです:
Select Distinct t1.LocationId,t1.LocationName,t1.RegisteredUnder from TBLlocations t1
join TBLlocations t2 on t2.RegisteredUnder!=t1.LocationId
where t1.Type='1' and t2.Type='1'
order by t1.RegisteredUnder
上記のクエリは、以下に示すように、タイプ「1」のすべての場所を返しました。
--------------------------------------------------
LocationId LocationName RegisteredUnder
--------------------------------------------------
LOC102 Location3 LOC201
LOC302 Location4 LOC201
LOC103 Location5 LOC201
LOC104 Location6 LOC201
LOC105 Location7 LOC104
LOC106 Location8 LOC105
LOC107 Location9 LOC106
したがって、正確な結果を返すクエリが必要です。クエリで使用できる唯一のパラメーターは「タイプ」であり、常に「1」です。
PS: SQL Server 2008 を使用しています。