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

SQL CTE で完全な階層を取得する方法

    DECLARE @tmp TABLE(ID INT,ParentID INT,NAME VARCHAR(10),DEPTH INT)
    
    INSERT INTO @tmp VALUES
    (1      ,NULL            ,'A'             ,1 ),
    (2      ,NULL            ,'B'             ,1 ),
    (3      ,NULL            ,'C'             ,1 ),
    (4      ,1               ,'D'             ,2 ),
    (5      ,4               ,'E'            ,3 ),
    (6      ,5               ,'F'            ,4 );
    
    select * from @tmp
    
    ;WITH cte AS
    (
        SELECT   A.ID
                ,A.ParentID
                ,A.NAME
                ,A.DEPTH
        FROM    @tmp A
    
        UNION ALL
    
        SELECT   A.ID
                ,B.ParentID
                ,A.NAME
                ,A.DEPTH 
        FROM    cte A 
        INNER JOIN @tmp B on A.ParentID = B.ID 
        WHERE   B.ParentID IS NOT NULL
    
    )
    
    SELECT * FROM cte
    


    1. ExecuteNonQuery を使用して VARCHAR(MAX) 列に 8000 文字を超える文字を挿入するにはどうすればよいですか?

    2. 各列にvarchar(MAX)が使用されているにもかかわらず、CSVファイルのインポート中にSQLServerでエラーが発生する

    3. Oracle のすべてのアクセント付き文字の正規表現

    4. mysql-特定の条件を持つメッセージのスレッドリストのクエリ