SQL - 階層的な再帰クエリのMySQLを作成する方法

次のように私は、MySQLのテーブルを持っています:

ID | 名前| PARENT_ID 
19 | カテゴリ1 | 0 
20 | カテゴリ2 | 19 
21 | カテゴリー3 | 20 
22 | category4 | 21 
......

  

今、私はMySQLのクエリをしたい、私だけのid [すなわち、結果は「IDS '20、21,22を持つ必要があります]その後、私はそのすべてのサブIDを取得する必要があります[例えば、「ID = 19」と言う] ....そして、子供の成績が、それは変更することができますかわからない....

また、私は可能であれば、私は同じ機能を実現するために、単一のMySQLクエリを使用する方法を知ってみましょう.....ループ解決のために使用する必要があります。

ソリューション

1.あなたがしている場合のMySQL 8は、再帰的な使用where句を:

再帰CTE(ID、名前、PARENT_ID)を有するとして選択     ID、
             名前、
             PARENT_ID 
  から       製品
         PARENT_ID = 19 
  組合全て選択     p.id、
             p.name、
             p.parent_id から       製品Pの
  内側にCTEを参加
          p.parent_idに = CTEを.ID を選択 * から CTE;
  
  

where指定された値は、親のすべての子孫を選択するように設定する必要がありますCONNECT BY

MySQLバージョン(バージョン5.7まで)をサポートしていません2.共通テーブル式は、あなたがこれを達成するために、次のクエリを使用することができます。

選択  ID、
        名前、
        PARENT_ID 
から選択 * から製品
         PARENT_ID、ID順)products_sorted、 選択:= @pv ' 19 ' 初期化)
    FIND_IN_SET(PARENT_ID、@pv)
と長さ(@pv: =連結(@pvを、' '、ID))

これはバイオリンです。

ここでは、where指定された値は、親のすべての子孫を選択するように設定する必要がありますCONNECT BY

 

おすすめ

転載: www.cnblogs.com/foreversun/p/11401581.html