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

SQLServerのツリー構造データクエリ

    親子関係のレベルが限られているとすれば、デザインに問題はないと思います。再帰CTEを使用して関係を取得する簡単な例を次に示します。

    USE tempdb;
    GO
    
    CREATE TABLE dbo.tree
    (
        ID INT PRIMARY KEY,
        name VARCHAR(32),
        ParentID INT FOREIGN KEY REFERENCES dbo.tree(ID)
    );
    
    INSERT dbo.tree SELECT 1, 'grandpa', NULL
    UNION ALL SELECT 2, 'dad', 1
    UNION ALL SELECT 3, 'me', 2
    UNION ALL SELECT 4, 'mom', 1
    UNION ALL SELECT 5, 'grandma', NULL;
    
    ;WITH x AS
    (
        -- anchor:
        SELECT ID, name, ParentID, [level] = 0
        FROM dbo.tree WHERE ParentID IS NULL
        UNION ALL
        -- recursive:
        SELECT t.ID, t.name, t.ParentID, [level] = x.[level] + 1
        FROM x INNER JOIN dbo.tree AS t
        ON t.ParentID = x.ID
    )
    SELECT ID, name, ParentID, [level] FROM x
    ORDER BY [level]
    OPTION (MAXRECURSION 32);
    GO
    

    クリーンアップすることを忘れないでください:

    DROP TABLE dbo.tree;
    

    これは役立つ記事かもしれません。 別の方法は、 hierarchyid しかし、ほとんどのシナリオでは非常に複雑だと思います。



    1. 矢印表記

    2. PHP5.5を使用してAmazonEC2にpdo_mysqlをインストールする

    3. Oracle SQLDeveloperSQLワークシートウィンドウでテキストを印刷する

    4. MySQLテーブルに値を挿入するときに自動インクリメント主キーの属性をオーバーライドするにはどうすればよいですか?