ホームページ >データベース >mysql チュートリアル >SQL Server で再帰的自己結合を実行して階層データを横断するにはどうすればよいですか?
SQL Server の再帰的自己結合: 簡単な方法
データベース管理において、再帰的自己結合は、テーブルが複数回自己結合できるようにするテクノロジーであり、階層データを横断することができます。 SQL Server では、これは再帰クエリによって実現できます。
次のシナリオを考えてみましょう: 次の列を持つ「person」というテーブルがあります:
<code>PersonID | Initials | ParentID</code>
このテーブルは階層を表しており、各人物には「Initials」列があり、別の人を参照する「ParentID」を持つ可能性があります。
「person」テーブルで再帰的自己結合を実行するには、以下に示すように共通テーブル式 (CTE) を使用できます。
<code class="language-sql">WITH q AS ( SELECT * FROM Person WHERE ParentID IS NULL UNION ALL SELECT m.* FROM Person m JOIN q ON m.parentID = q.PersonID ) SELECT * FROM q</code>
この CTE:
ツリーの順序を維持するために、次のように再帰クエリに並べ替え条件を追加できます。
<code class="language-sql">WITH q AS ( SELECT m.*, CAST(ROW_NUMBER() OVER (ORDER BY m.PersonId) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN AS bc FROM Person m WHERE ParentID IS NULL UNION ALL SELECT m.*, q.bc + '.' + CAST(ROW_NUMBER() OVER (PARTITION BY m.ParentID ORDER BY m.PersonID) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN FROM Person m JOIN q ON m.parentID = q.PersonID ) SELECT * FROM q ORDER BY bc</code>
ORDER BY 条件を変更することで、階層内の兄弟要素の順序を制御できます。
以上がSQL Server で再帰的自己結合を実行して階層データを横断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。