4

SQLServer2008を使用しています。次のようなテーブルがあります。

UnitId ParentId  UnitName
---------------------------
1        0       FirstUnit
2        1       SecondUnit One  
3        1       SecondUnit Two
4        3           B
5        2           C
6        4           D
7        6           E
8        5           F

レコードの2番目の親を取得したい。例えば:

8に等しいユニットIDを選択すると、2に等しいユニットIDが表示されます。SecondUnitOneである必要があります。または、7に等しいユニットIDを選択すると、3に等しいユニットIDが表示されます。SecondUnitTwoである必要があります。

この方法でSQLクエリを作成するにはどうすればよいですか?

4

2 に答える 2

6

しばらく時間がかかりましたが、ここにあります:)

with tmp as (
  select unitId, parentId, unitName, 0 as iteration
  from t
  where unitId = 7
  union all
  select parent.unitId, parent.parentId, parent.unitName, child.iteration + 1
  from tmp child
  join t parent on child.parentId = parent.unitId
  where parent.parentId != 0
)
select top 1 unitId, parentId, unitName from tmp
order by iteration desc

ここにも、遊ぶためのフィドルがあります。

于 2012-04-13T06:30:27.807 に答える
1
SELECT t.*, tParent1.UnitId [FirstParent], tParent2.UnitId [SecondParent]
FROM Table t
    LEFT JOIN Table tParent1 ON t.ParentId = tParent1.UnitId
    LEFT JOIN Table tParent2 ON tParent1.ParentId = tParent2.UnitId
WHERE t.UnitId = <Unit ID search here>
    AND NOT tParent2.UnitId IS NULL

編集:2番目の親がない場合でも結果を返したい場合は、WHERE句の2番目の部分を省略します。

于 2012-04-13T06:28:51.163 に答える