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

深さの子ノードの最初のレベルのみを取得するにはどうすればよいですか?

    解決策は次のとおりです:

    select p1.* from tree_path as p1
    left outer join (tree_path as p2 join tree_path as p3 on p2.children = p3.parent)
     on p2.parent = p1.parent 
     and p3.children = p1.children 
     and p2.parent <> p2.children 
     and p3.parent <> p3.children
    where p1.parent = 3 and p2.parent is NULL;
    +----------+--------+
    | children | parent |
    +----------+--------+
    |        3 |      3 |
    |        7 |      3 |
    |        8 |      3 |
    +----------+--------+
    

    p1.parent =7を変更すると、次の出力が得られます:

    +----------+--------+
    | children | parent |
    +----------+--------+
    |        7 |      7 |
    |       15 |      7 |
    |       16 |      7 |
    +----------+--------+
    

    仕組みは次のとおりです。直接の子は子孫であり、親から子へのパスはありますが、親から3番目のノードを経由して子へのパスはありません。したがって、このようなパス(p2-> p3)に参加しようとしますが、何も見つからない場合は、p2とp3のすべての列がNULLになります。




    1. Laravelデータベーススキーマ、Nullable Foreign

    2. postgres9.4でトリガーを使用して外部プログラムを実行する

    3. バルクデータをMySQLにインポートする

    4. MySQL ORDER BY DESCは高速ですが、ASCは非常に低速です