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

SQLでテーブルの親子関係を使用して階層ツリーの1世代のみを選択するにはどうすればよいですか?

    これは冗長で醜く、遅くなり、4世代に制限されますが、他にどのように実行できるかわかりません。

    SELECT person_name, parent_name FROM
    
        (SELECT child1.name AS person_name, parent1.name AS parent_name, '1' AS generation
        FROM people as child1
        JOIN people as parent1
        ON child1.parent_person_id = parent1.person_id AND child1.parent_person_id = child1.person_id
    
        UNION
    
        SELECT child2.name AS person_name, parent2.name AS parent_name, '2' AS generation
        FROM people as child2
        JOIN people as parent2
        ON child2.parent_person_id = parent2.person_id AND child2.parent_person_id <> child2.person_id AND parent2.parent_person_id = parent2.person_id
    
        UNION
    
        SELECT child3.name AS person_name, parent3.name AS parent_name, '3' AS generation
        FROM people as child3
        JOIN people as parent3
        ON child3.parent_person_id = parent3.person_id AND parent3.parent_person_id <> parent3.person_id
        JOIN people as grandparent1
        ON parent3.parent_person_id = grandparent1.person_id AND grandparent1.parent_person_id = grandparent1.person_id
    
        UNION
    
        SELECT child4.name AS person_name, parent4.name AS parent_name, '4' AS generation
        FROM people as child4
        JOIN people as parent4
        ON child4.parent_person_id = parent4.person_id AND parent4.parent_person_id <> parent4.person_id
        JOIN people as grandparent2
        ON parent4.parent_person_id = grandparent2.person_id AND grandparent2.parent_person_id <> grandparent2.person_id
        JOIN people as greatgrandparent
        ON grandparent2.parent_person_id = greatgrandparent.person_id AND greatgrandparent.parent_person_id = greatgrandparent.person_id
        ) AS tree
    
    WHERE generation = ?
    



    1. JavaとOracleXE間のデータソース接続を使用したOCIとTHINドライバ接続の違いは何ですか?

    2. PDOから返されたオブジェクトを独自のクラスに設定する

    3. PL / SQLでプログラムで表名を設定するにはどうすればよいですか?

    4. 開始日から終了日までmysqlで週ごとのレコードを取得する方法