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

SQLで再帰を使用して新しい列を返したいですか?

    これは、再帰的 の標準的な例です。

    これを試してください:

    with recursive subordinates as
      (select 
          employeid, 
          e.managerid, 
          e.managerid as leader 
       from employes e 
       where e.managerid in(select * from leaders) -- non recursive term
       union 
       select 
          e.employeid, 
          e.managerid, 
          a.managerid as leader 
        from employes e 
              join subordinates a on a.employeid = e.managerid -- recursive term
    ) select * from subordinates
    

    ドキュメントに記載されているとおり:

    再発あり 常に

    によって構成されます
    1. 非再帰的な用語
    2. ユニオン またはUNIONALL
    3. 再帰用語。クエリ出力を参照できる唯一の用語

    前の反復に出力がない場合、反省は終了します。




    1. OracleQueryによる数量を年ごとにロールアップ-過去3年間のみ

    2. mysqlクエリは1つのID列から複数のテーブルを表示します

    3. SQLServerテーブルのパーティション分割とパーティションのチュートリアル

    4. make_date()がPostgreSQLでどのように機能するか