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

MySQLの階層クエリ。 (MySQLと同等のもので接続)

    MySQLにはネイティブ階層クエリのサポートはありません。

    トラバースするレベルの数を制限するために、各レベルの結果を取得するクエリを記述し、その結果をUNION ALLと組み合わせることができます。 オペレーター。

    または、より再帰的なアプローチのためにMySQLストアドプログラム(プロシージャ)を作成することもできます。

    ネイティブSQLクエリを使用するアプローチの例として:

     SELECT t0.comp_code
       FROM tb_corp t0
      WHERE t0.mgr_emp_no = 111
    
     UNION ALL
    
    SELECT t1.comp_code
      FROM tb_corp t0
      JOIN tb_corp t1 ON t1.incharge_comp_code = t0.comp_code
     WHERE t0.mgr_emp_no = 111
    
     UNION ALL
    
    SELECT t2.comp_code
      FROM tb_corp t0
      JOIN tb_corp t1 ON t1.incharge_comp_code = t0.comp_code
      JOIN tb_corp t2 ON t2.incharge_comp_code = t1.comp_code
     WHERE t0.mgr_emp_no = 111
    
     UNION ALL
    
    SELECT t3.comp_code
      FROM tb_corp t0
      JOIN tb_corp t1 ON t1.incharge_comp_code = t0.comp_code
      JOIN tb_corp t2 ON t2.incharge_comp_code = t1.comp_code
      JOIN tb_corp t3 ON t3.incharge_comp_code = t2.comp_code
     WHERE t0.mgr_emp_no = 111
    

    このアプローチは、t4、t5、t6、...に拡張して、いくつかの(合理的な)有限数のレベルにまで拡張できます。

    より再帰的なアプローチとして、MySQLストアドプログラム(PROCEDURE)を作成できます。




    1. mysql-列に助成金を適用する方法は?

    2. MySQLで、このクエリを高速化するためにインデックスを作成するにはどうすればよいですか?

    3. LaravelLeftJoinここで

    4. MySQL DBのすべてのテーブルのプレフィックスを変更するにはどうすればよいですか?