ホームページ >データベース >mysql チュートリアル >SQL Server の再帰的自己結合で階層データを効率的に移動するにはどうすればよいですか?
SQL Server の再帰的自己結合
SQL Server では、再帰的自己結合を使用して、親子関係に基づいてテーブル自体を複数回実行します。
再帰を実行するには自己結合を使用して特定の階層に関連するレコードを取得するには、次の戦略を使用できます:
Common Table Expression (CTE) の使用
CTE (CTE とも呼ばれます)再帰的クエリとして、再帰的自己結合を実装するために使用できます。中心となるアイデアは、特定の基準を満たすレコード (親がないなど) を選択するアンカー クエリを定義し、再帰的サブクエリを使用して結果に子レコードを追加することです。
WITH q AS ( SELECT * FROM mytable WHERE ParentID IS NULL UNION ALL SELECT m.* FROM mytable m JOIN q ON m.parentID = q.PersonID ) SELECT * FROM q
順序付けを追加することにより、再帰サブクエリに対する条件の場合、ツリーの順序は次のようになります。保存:
WITH q AS ( SELECT m.*, CAST(ROW_NUMBER() OVER (ORDER BY m.PersonId) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN AS bc FROM mytable 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 mytable m JOIN q ON m.parentID = q.PersonID ) SELECT * FROM q ORDER BY bc
考慮事項:
以上がSQL Server の再帰的自己結合で階層データを効率的に移動するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。