|
|
1 2 次のページ
|
|
階層問い合わせ |
Oracleの階層問い合わせをPostgreSQLで実現するには、connectby()を使います。
図8のような表があったとしましょう。担当者マスタのMGR_ID列は、各行の担当者にとって、上司となる担当者のIDを表しています。
|
SQL> SELECT * FROM 担当者マスタ; |
|
担当者ID |
担当者名 |
ふりがな |
MGR_ID |
生年月日 |
性別 |
-------- |
----------------- |
----------------- |
-------- |
-------- |
------ |
1 |
鈴木 |
すずき |
|
60-01-23 |
1 |
2 |
小野 |
おの |
|
60-08-02 |
1 |
3 |
斎藤 |
さいとう |
|
63-10-15 |
1 |
4 |
藤本 |
ふじもと |
3 |
72-07-18 |
1 |
5 |
小林 |
こばやし |
3 |
71-02-11 |
0 |
6 |
伊藤 |
いとう |
2 |
72-04-01 |
0 |
7 |
佐瀬 |
させ |
2 |
75-02-21 |
1 |
8 |
宇賀神 |
うがじん |
1 |
75-12-22 |
1 |
9 |
岡田 |
おかだ |
4 |
72-03-18 |
1 |
|
9行が選択されました |
|
図8:担当者マスタ表
|
Oracleには、図8のような階層的な構造を含んだテーブルがあるときに、1つのSELECT文で図9のような出力を得ることができる「階層問い合わせ」という便利な機能があります。
|
担当者(階層表示)
-------------------
鈴木
宇賀神
小野
伊藤
佐瀬
斎藤
藤本
岡田
小林
9行が選択されました。
|
図9:Oracleでの階層問い合わせの結果
|
階層問い合わせは、指定された条件に従って、階層上の親から子へと段階的に該当行を検索します。図9の出力を得るためのSELECT文は次のとおりです。START WITH句で階層問い合わせを開始するスタート行を指定し、CONNECT BY句で階層的に子となる行を指定します。
|
SELECT LPAD(' ', (LEVEL-1)*2) ||
担当者名"担当者(階層表示)"
FROM 担当者マスタ
START WITH MGR_ID IS NULL
CONNECT BY PRIOR 担当者ID = MGR_ID;
|
|
PostgreSQL単体には階層問い合わせの機能はありませんが、ソースコード配布パッケージのcontrib/tablefuncフォルダに、同等の機能を持つconnectby()関数が用意されています。
|
1 2 次のページ
|
書籍紹介 まるごと PostgreSQL! Vol.1
日本での市場シェアNo.1(オープンソースRDBMS部門)データベースソフトPostgreSQLの最新情報を、開発メンバーを含む豪華執筆陣が多面的かつ詳細に解説します。PostgreSQL用クラスタリング/レプリケーションソフト、PostgreSQL⇔Oracle移行、PostgreSQLによる大規模サイト構築法、新バージョンPostgreSQL 8.0先行レビュー、PostgreSQL用.NETデータプロバイダ等々、他では読めない貴重な記事が満載です。
発売日:2004/12/08発売
定価:\1,890(本体 \1,800+税)
|
|
|
著者プロフィール
奥畑 裕樹(OKUHATA, Hiroki)
Javaとオープンソース技術を得意とする技術コンサルタント。最近のテーマは、ソフトウェア開発の全体最適をはかること。気が付けば、10才のときにプログラミングを始めて以来、常に何かを作っている…。
|
|
|
|