sql >> データベース >  >> RDS >> Sqlserver

テーブルをそれ自体に結合する

    それ自体でテーブルを完全に結合できます。

    ただし、設計では複数レベルの階層を持つことができることに注意してください。 SQL Server (2005 以降を想定) を使用しているため、再帰 CTE でツリー構造を取得できます。

    概念実証の準備:

    declare @YourTable table (id int, parentid int, title varchar(20))
    
    insert into @YourTable values
    (1,null, 'root'),
    (2,1,    'something'),
    (3,1,    'in the way'),
    (4,1,    'she moves'),
    (5,3,    ''),
    (6,null, 'I don''t know'),
    (7,6,    'Stick around');
      

    クエリ 1 - ノード レベル:

    with cte as (
        select Id, ParentId, Title, 1 level 
        from @YourTable where ParentId is null
    
        union all
    
        select yt.Id, yt.ParentId, yt.Title, cte.level + 1
        from @YourTable yt inner join cte on cte.Id = yt.ParentId
    )
    select cte.*
    from cte 
    order by level, id, Title
      

    1. Laravel-整合性制約違反:1452子行を追加または更新できません:外部キー制約が失敗します

    2. MySQLビューのパフォーマンス

    3. WAMP仮想ホストが機能しない

    4. (NVL、ABSなど)のようなネイティブOracle関数のリストを取得する方法