こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

OracleのSQLでツリー表示取得

いつもお世話になります。

SQLの質問なのですが、現在プロジェクトから離れていった方が書かれたSQLが違っていたので、いろいろと修正してみたのですがうまく値が取れないのでどこが間違っているかご相談したく

記述したSQL:
SELECT * FROM XXXTBL
WHERE keyID = 'aaa'
START WITH PARENT_ID=0
CONNECT BY PRIOR
PARENT_ID=ID
ORDER BY ID;

とりたい値:
  id  項目名  PARENT_ID
  0    親   null
2 A    0
3 B 0
4 B-1 3

とってきた値
  id  項目名  PARENT_ID
  0    親   null
  0    親   null
2 A    0
3 B 0

となります。
いろいろと調べてみたのですが、何が違うのか判らず・・・・・

現在は調査というレベルなので、テーブルには上記の4レコードのみが入っています。
keyIDは全レコードに同一のものが入っています。

もしかしたら、すごく基本なことなのかもしれませんが
よろしくご教授お願いいたします。

投稿日時 - 2003-10-29 14:23:49

QNo.691851

困ってます

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

まずCONNECTは
CONNECT BY PRIOR 親行の項目 = 子行の項目
です。
なので、記述されたSQLでは、
START WITH PARENT_ID=0により、まず(2,'A',0)、(3,'B',0)が選択され、次に親行である(2,'A',0)のPARENT_ID(0)から子行としてID=0の(0,'親',NULL)が選択され、その次に親行である(3,'B',0)のPARENT_ID(0)から子行としてID=0の(0,'親',NULL)が選択され、以上の結果がORDER BYされて「とってきた値」という結果になります。
「とりたい値」から思うに
START WITH ID = 0
CONNECT BY PRIOR ID = PARENT_ID
でしょう。(もしくは START WITH PARENT_ID IS NULL)
たぶん(^^;

投稿日時 - 2003-10-29 19:47:00

お礼

レスありがとうございます。

質問を書いた後にもいろいろ試してみてFlossenEngelさんのおっしゃるとおりの形となりました^;

自己解決でレスが書きたくても書けない仕様なので、すぐにお礼が言えず申し訳ありませんでした。

投稿日時 - 2003-10-30 13:22:03

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問