• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:階層データのあるテーブルで親から最下層の子までのパスを列挙するクエリ)

階層データのあるテーブルで親から最下層の子までのパスを列挙するクエリ

このQ&Aのポイント
  • 最上位の親から最下層の子までのパスを列挙するSQLクエリで親子関係のデータが自動的に作成されるシステムの問題を解決したい。
  • テーブル構造は直属の親と子を1レコードで保存しており、最上位の親のIDは0であり、それ以外の親のIDは1以上である。
  • 提供されたSQLクエリではパスの列挙はできるが、名前の表示が最上位の親だけであり、クエリの改善方法を求める。

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

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

再帰CTEの話をすると混乱するかもしれませんので、とりあえず以下を。 ただ、クエリを見る限り、Accessっぽいのが気になります。 SELECT CASE WHEN d5.ChildID IS NOT NULL THEN d5.ChildID WHEN d4.ChildID IS NOT NULL THEN d4.ChildID WHEN d3.ChildID IS NOT NULL THEN d3.ChildID WHEN d2.ChildID IS NOT NULL THEN d2.ChildID WHEN d1.ChildID IS NOT NULL THEN d1.ChildID END, CASE WHEN d5.ChildID IS NOT NULL THEN d4.ChildID WHEN d4.ChildID IS NOT NULL THEN d3.ChildID WHEN d3.ChildID IS NOT NULL THEN d2.ChildID WHEN d2.ChildID IS NOT NULL THEN d1.ChildID END, CASE WHEN d5.ChildID IS NOT NULL THEN d3.ChildID WHEN d4.ChildID IS NOT NULL THEN d2.ChildID WHEN d3.ChildID IS NOT NULL THEN d1.ChildID END, CASE WHEN d5.ChildID IS NOT NULL THEN d2.ChildID WHEN d4.ChildID IS NOT NULL THEN d1.ChildID END, CASE WHEN d5.ChildID IS NOT NULL THEN d1.ChildID END, COALESCE(d1.ChildName,d2.ChildName,d3.ChildName,d4.ChildName,d5.ChildName) FROM Department d1 LEFT OUTER JOIN Department d2 ON d2.ChildID=d1.ParentID LEFT OUTER JOIN Department d3 ON d3.ChildID=d2.ParentID LEFT OUTER JOIN Department d4 ON d4.ChildID=d3.ParentID LEFT OUTER JOIN Department d5 ON d5.ChildID=d4.ParentID

buraigasho
質問者

お礼

おお!いとも簡単に・・・ まだまだ勉強不足を痛感しています。こんな方法もあるんですね・・・ 教えていただいて本当にありがとうございます。 ちなみに、Accessっぽいのは、もともとAccessから勉強しだした人間なので、 基礎が抜けきらない状態です。 SQLServer2000を手にしてSQL文を勉強しだしたので、初心者に近いです。・・・ 再帰CTEなどの例文をいろいろやっていきま=す。

関連するQ&A