• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLで階層(ツリー)情報を取得)

SQLで階層(ツリー)情報を取得する方法・アドバイス

このQ&Aのポイント
  • SQLを使用して階層(ツリー)情報を取得する方法やアドバイスをお教えください。
  • 添付画像のテーブルイメージを元に、階層構造の情報を取得したいです。PostgreSQLでの動作を前提とし、SQLを使って解決したいです。
  • クエリの発行数をなるべく1回にしたいですが、必要に応じて2回以上のクエリも使用できます。また、アプリケーション側でのループ処理は避け、一時テーブルの作成も可能です。

質問者が選んだベストアンサー

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

PostgreSQLの環境がないので試すことができないのですが、 connectby()関数を使ってみてはどうでしょうか。 「PostgreSQL 階層問合せ」などで検索してみるといいと思います。 参考になれば幸いです。

miyahiro0730
質問者

補足

せっかくご回答して頂いたのに、お礼が遅くなって大変申し訳ございません。 上記回答して頂いた内容を調べてみました。 現在Ver8.4では「WITH RECURSIVE」という処理でわかりやすい文法になってるようですね。 こういう処理自体はじめて知りました。 尚、現状ですがツリーイメージにあります、リーフ(末端)からルート(最上位)までの階層を取得する処理は以下のSQL文で解決しましたが、全てのリーフ(末端)を取得するようなSQLはできませんでした。(もう少しでできそうだったんですが…) ループで回すしか無いですかね… --現状のSQL------------------------------------------------------ WITH RECURSIVE rec(階層ID, 階層名, 親階層ID, 末端階層ID) as ( SELECT 階層ID, 階層名, 親階層ID, '03' AS 末端階層ID ← '03'は末端階層ID(とりあえず末端の'03'を使用) FROM 階層管理テーブル WHERE 階層ID = '03' UNION ALL SELECT A.階層ID, A.階層名, A.親階層ID, '03' AS 末端階層ID ← '03'は末端階層ID(とりあえず末端の'03'を使用) FROM 階層管理テーブル A INNER JOIN rec ON A.階層ID = rec.親階層ID ) SELECT * FROM rec ORDER BY 親階層ID, 階層ID -------------------------------------------------------------------

関連するQ&A