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

最上位の親 ID の検索

    さらに短い CTE :

    WITH cte AS(
          SELECT *, id AS topparent 
          FROM t 
          WHERE parentid IS NULL
      UNION ALL
          SELECT t.*, c.topparent 
          FROM t JOIN cte c ON c.id = t.parentid
          WHERE t.id <> t.parentid
    )
    SELECT * FROM cte
    

    ここでテスト:SQL Fiddle

    編集 :このいまいましい SQLfiddle が再び応答しなくなりました。以下の DDL コードをテストしてください

    CREATE  table t (id INT, parentid INT);
    INSERT INTO T VALUES (1  , NULL );
    INSERT INTO T VALUES (2  , 1    );           
    INSERT INTO T VALUES (3  , 2    );          
    INSERT INTO T VALUES (9  , NULL );          
    INSERT INTO T VALUES (5  , 9    );          
    INSERT INTO T VALUES (6  , 5    );          
    INSERT INTO T VALUES (25 , NULL );          
    INSERT INTO T VALUES (30 , 25   );
    


    1. Oracleで時差を特定の形式に変換する

    2. SQLでbool値を設定する方法

    3. Oracleで動的リターン型を使用してplsql関数を定義するにはどうすればよいですか?

    4. SQLServerストアドプロシージャからのAPIの呼び出し