Id、ParentId、名前、説明などのプロパティを持つテーブルServiceItemがあります。テーブルから階層を選択
Id ParentId Name
1 NULL '12'
2 1 '123'
私が試してみましたこの:
SELECT
*
FROM ServiceItem si
WHERE si.Name = '123'
OR EXISTS (
SELECT
*
FROM ServiceItem syst
JOIN ServiceItem si2
ON si2.ParentId = syst.Id
WHERE syst.Id = si.ParentId
AND si2.Name = '123'
)
しかし、階層の最大レベルは、私のようななめらかを取得する例Name = '123'
ためのいくつかの条件で行を選択する問合せ、およびその親行を必要とする2ですそれは親を返し、そのすべては子です。 1つのクエリでそれを行う機会はありますか?私はそれを行うためにT-SQLを使用しています。
これはthis questionとは異なります。パスのIDだけでなく、クエリの条件が異なる可能性があるため、たくさんの行を取得する必要があるためです。
[IDとparentIdを持つテーブル内のパスをトラバースする方法](http://stackoverflow.com/question) s/37197500/how-to-traverse-a-path-in-id-parentidを持つテーブル) –
@a_horse_with_no_nameいいえ、それは私が探しているものではありません。 –
[SQL ServerのCTEと再帰の例]の重複している可能性があります(http://stackoverflow.com/questions/14274942/sql-server-cte-and-recursion-example)。ツリーの最上部ではなくツリーの最下部でツリーを開始するようにクエリを変更する必要がありますが、基本的には同じ構文です。 –