(Oracleを使用して)階層的なSQLクエリに苦労しています。ユニークなIDを持つウィジェットのテーブルがあるとします。ウィジェットは一度だけコピーでき、新しいウィジェットから親IDを追跡します。例えば、私が表示されるクエリを作成しようとしているSQL階層クエリ:すべての親子のIDを指定してフルツリーを検索する(Oracle)
(102と104は単なるダミーデータである)105
、その後、103その後、ウィジェット100をコピーして、ウィジェット101になりますid parent_id
100
101 100
102
103 101
104
105 103
CREATE TABLE WIDGETS (ID NUMBER NOT NULL, PARENT_ID NUMBER);
INSERT INTO WIDGETS (ID, PARENT_ID) VALUES (100, null);
INSERT INTO WIDGETS (ID, PARENT_ID) VALUES (101, 100);
INSERT INTO WIDGETS (ID, PARENT_ID) VALUES (102, null);
INSERT INTO WIDGETS (ID, PARENT_ID) VALUES (103, 101);
INSERT INTO WIDGETS (ID, PARENT_ID) VALUES (104, null);
INSERT INTO WIDGETS (ID, PARENT_ID) VALUES (105, 103);
を言うことができますウィジェットの完全な履歴、関係のIDのいずれかを使用します。
だから私は、クエリに '103' のID(または '100' ...か '105')を与えれば、私は、クエリは、このような何かを返すことを期待したい:
id parent_id
100
101 100
103 101
105 103
I CONNECT BY PRIORを使ってみましたが、startで始めるにはIDで始める必要があります。
select parent_id as from_id, id as to_id
from WIDGETS
start with id = 100
CONNECT BY PRIOR id = parent_id;
from_id to_id
null 100
100 101
101 103
103 105
しかし、私は必ずしもidの開始を知っていないものであれば:たとえば、私は、クエリに元のIDを与える完全なツリーを表示することができますか?起源IDを見つけてそこから完全な木を得ることは可能ですか?
あなたは '='それもペア(101、104)を追加することで対応でしょう 'IN IDで始まり'へのIDで始まるを変更した場合:それは役に立てば幸い、これを試してみてください。 – Unoembre
これは私が探していたものです。ありがとうございます。 – a3uge