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

Mysql select recursiveは、複数のレベルを持つすべての子を取得します

    以前の解決策はどれも私にはうまくいきませんでした。どちらも、親が特定の順序でデータベースに保存されている場合にのみ機能します。

    クエリがどのように機能するかを完全には理解していないことを認めなければなりませんが、自分に合った方法を見つけることができます(少なくとも他の回答よりも優れています)。

    1番目と2番目のクエリが機能しないデータは次のとおりです。

    idFolder , FolderName , idFolderParent
       1           ADoc           Null  
       2           ADoc1           7  
       3           ADoc2           2
       4           ADoc3           3
       5           ADoc4          Null
       6           ADoc5           5
       7           ADoc6           5
    

    このデータセットで最初と2番目のクエリを使用する場合、ID 5の場合、結果として「6,7」のみが取得されます。しかし、私のクエリを使用すると、期待される結果である「6,7,2,3,4」が得られます。

    私のバージョン:

    SELECT GROUP_CONCAT(lv SEPARATOR ',') FROM (
    SELECT @pv:=(SELECT GROUP_CONCAT(idFolder SEPARATOR ',') FROM Folder 
    WHERE FIND_IN_SET(idFolderParent, @pv)) AS lv FROM Folder 
    JOIN
    (SELECT @pv:=5) tmp
    ) a;
    

    それが誰かを助けることを願っています。評判が悪いため、他の回答にコメントしたり、反対票を投じたりすることはできません:(



    1. MySQLのDESCRIBE[テーブル]に相当するSQLiteはありますか?

    2. データベース構造変更のためのバージョン管理システムはありますか?

    3. 別のテーブルの番号に基づいて、1つのテーブルに複数の行を挿入します

    4. UPDATEステートメントがREFERENCE制約と競合していました-SQLServer/TSQLチュートリアルパート76