ここで興味深い問題があります。しかし、私はすでにエレガントではない方法で解決しているので、それは単なる知識です。
私は貸衣装を持っているテーブルを持っており、彼らは所有者または扶養家族である可能性があり、この関係は家族として説明されています. 各ファミリは、所有者と 0-n の従属のみを持つことができます。所有者は H で識別され、扶養家族は D で識別されます。
私が必要としているのは、所有者とその扶養家族の名前でデータを並べ替える方法です。というわけで以下のサンプルデータ
idcostumer name idfamily relation
1 Natalie Portman 1 H
2 Mark Twain 3 D
3 Carl Sagan 2 D
4 Bob Burnquist 2 H
5 Sheldon Cooper 1 D
6 Anakin Skywalker 4 H
7 Luke Skywalker 4 D
8 Leia Skywalker 4 D
9 Burnquist Jr. 2 D
10 Micheal Jackson 3 H
11 Sharon Stone 1 H
12 Michelle Pfeiffer 3 D
上記の結果を 1 回のクエリで取得することは可能ですか? ご覧のとおり、注文は名前です(所有者のみ)
idcostumer name idfamily relation
6 Anakin Skywalker 4 H
8 Leia Skywalker 4 D
7 Luke Skywalker 4 D
4 Bob Burnquist 2 H
9 Burnquist Jr. 2 D
3 Carl Sagan 2 D
10 Micheal Jackson 3 H
2 Mark Twain 3 D
12 Michelle Pfeiffer 3 D
11 Sharon Stone 1 H
1 Natalie Portman 1 D
5 Sheldon Cooper 1 D
この例のテスト ケース データ。
create table costumer (
idcostumer integer primary key,
name varchar2(20),
idfamily integer,
relation varchar2(1)
);
これは、このテーブルの挿入ステートメントです。
insert into costumer values ( 1 , 'Natalie Portman' , 1, 'D');
insert into costumer values ( 2 , 'Mark Twain' , 3, 'D');
insert into costumer values ( 3 , 'Carl Sagan' , 2, 'D');
insert into costumer values ( 4 , 'Bob Burnquist' , 2, 'H');
insert into costumer values ( 5 , 'Sheldon Cooper' , 1, 'D');
insert into costumer values ( 6 , 'Anakin Skywalker' , 4, 'H');
insert into costumer values ( 7 , 'Luke Skywalker' , 4, 'D');
insert into costumer values ( 8 , 'Leia Skywalker' , 4, 'D');
insert into costumer values ( 9 , 'Burnquist Jr.' , 2, 'D');
insert into costumer values ( 10, 'Micheal Jackson' , 3, 'H');
insert into costumer values ( 11, 'Sharon Stone' , 1, 'H');
insert into costumer values ( 12, 'Michelle Pfeiffer', 3, 'D');
私はいくつかのことを試しました.connect byステートメントとfamilyidを関係に連結して父と太陽の関係を作成しました。関係の説明とファミリ ID による over 句の順序付けで row_count を使用しましたが、この方法では名前の順序が失われました。