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

MySQL-階層内のすべてのサブアイテムを取得することは可能ですか?

    これは単純な<​​em>隣接モデルです。 テーブル?その場合、最大深度を知らずに1つのクエリでそれを行うことはできません。

    思考の糧は、MySQLでの階層データの管理 です。 (ただし、入れ子集合モデルの使用は推奨していません。 定期的に変更されるデータの場合)。

    多くの(左)結合がある場合、より具体的には、ツリーの最大深度と同じ数の左結合がある場合、1つのクエリで可能になります。これが、多くの人が特定のカテゴリの「深さ」を保存する傾向がある理由です。そのため、同じテーブルへの結合の量をフィルタリングして、より適切な量に制限することができます。

    個人的には、定期的にデータを変更する場合:挿入/更新時にトリガーを構成する傾向があります。これにより、IDに基づいてノードの現在の「パス」が保存/キャッシュされます(たとえば、パスは「12/62/28/345」です)。 '、区切り文字/間のすべてのステップ は正しい順序の親ノードの主キーです(345の親は28、28の親は62など))。したがって、次のように1つの結合でクエリを実行できます(/セパレータとして使用):

    SELECT j.*
    FROM tablename o
    JOIN tablename j
    WHERE j.path LIKE CONCAT (o.path,'/%')
    AND  j.id != o.id  -- skip parent asked for.
    WHERE o.id = <the id of the node you're looking for>;
    



    1. Linux上のMSSQLServerとWindowsのパフォーマンステストで違いを見つける

    2. row_to_jsonを使用したPostgres再帰クエリ

    3. 2つの同期レプリカ間でSQLServerのAlwaysON可用性グループを構成します。パート2

    4. SQLServerレプリケーションのセットアップと構成