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

クエリによるPostgresグループ

    再帰クエリの場合、0が埋め込まれた文字列でこのトリックを使用して階層パスを作成できます:SQLフィドル

    with recursive comment_list(article_comment_id, parent_comment_id, comment, article_id, comment_depth, comment_path) AS (
        select c.article_comment_id, 
               c.parent_comment_id, 
               c.comment, 
               c.article_id, 
               c.comment_depth,
               substr(CAST(1000000000+c.article_comment_id as varchar(1000)),2)
        from test_comment c
        where article_id = 100
          and parent_comment_id = 0
    
      union all
    
        select c.article_comment_id, 
               c.parent_comment_id, 
               c.comment, 
               c.article_id, 
               c.comment_depth,
               cl.comment_path || substr(CAST(1000000000+c.article_comment_id as varchar(1000)),2)
        from test_comment c
           join comment_list cl on c.parent_comment_id = cl.article_comment_id
    )
    select cl.article_comment_id,
         cl.comment_path, 
         cl.parent_comment_id,
         cl.comment, 
         cl.article_id,
         cl.comment_depth
    from comment_list cl
    order by cl.comment_path, cl.article_comment_id, cl.comment_depth;
    

    GROUPBYを削除します。表示用にそれらを「グループ化」したいのですが、これは実際には「注文者」です

    select cl.parent_comment_id, 
         cl.article_comment_id,
         cl.comment, 
         cl.article_id,
         cl.comment_depth
    from comment_list cl
    order by cl.parent_comment_id, cl.article_comment_id, cl.comment_depth;
    

    cl.root_idが必要な場合と不要な場合があります 順で、それは可能性があります

    order by cl.root_id, cl.parent_comment_id, cl.article_comment_id, cl.comment_depth;
    



    1. 最新のMySQLデータを選択しますが、独自の手段

    2. VBSとレジストリを使用して、インストールされているバージョンと32ビットと64ビットのOracleドライバを判別する

    3. MySQL:スレーブノードへの書き込み

    4. SQLServer2008およびHashBytes