質問 |
||
| 質問者:azuaz_001 | データ検索でこんなケース | |
|---|---|---|
困り度:
|
テーブルに以下のような内容が格納されているとします。 グループ1 グループ2 ----------+------------+---- 購買係 山田太郎 掃除当番 山田太郎 営業課 購買係 営業課 事務係 第一営業部 営業課 ----------+-------------+---- 上記のようなデータの持ち方で例えば グループ1「山田太郎」で検索を行なった際に それに紐付くデータを抽出したいと考えております。 出力結果 --------- 購買係 掃除当番 営業課 第一営業部 上記をSQLを使って出力する方法をどうかお教えください。 |
|
質問投稿日時:08/03/12 17:07 質問番号:3856508 |
||
回答良回答10pt |
|
| 回答者:chukenkenkou | Oracleの階層問い合わせの例です。 http://www.atmarkit.co.jp/fdb/rensai/sqlclinic06/sqlclinic06_1.html |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/15 19:40 回答番号:No.8 |
|
| この回答へのお礼 | 皆さんにお教えいただいた方法を参考に意図する作業を行うことができました。どうもありがとうございました。 |
回答 |
|
| 回答者:assault852 | >実質的な階層が4〜8程度あるのですがテーブルを分けるとなるとどのように分けると良いでしょう 単純な話しです。 第一階層 検索キー、第二階層検索キー 第二階層 検索キー、第三階層検索キー ・・・ でしょ。 |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/15 11:08 回答番号:No.7 |
|
| この回答へのお礼 | ご回答ありがとうございます。ソースDBの構造が今回のような入れ子状態になっているため困っておりました。将来的にはテーブルを分けた形での運用を考えたいと思います。 |
回答 |
|
| 回答者:chukenkenkou | #5です。一部訂正します。 #1さんも指摘していますが、 ↓ #4さんも指摘していますが、 |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/14 23:06 回答番号:No.6 |
|
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| 回答者:chukenkenkou | RDBMS名とバージョンは何ですか? せっかく具体的なSQLを提示しても、azuaz_001の環境では実行できないかも知れません。 #1さんも指摘していますが、Oracleの階層問い合わせ、DB2やSQL Server 2005の再帰クエリなら、実質的に階層の制限はありません。 それ以外のRDBMSなら、8階層であればその階層分のunionと自己結合を組み合わせて可能です。 |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/14 23:05 回答番号:No.5 |
|
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答良回答20pt |
|
| 回答者:nora1962 | Oracle使えば階層型のSQLで取得可能です。 一応無償のExpress版もあるので導入を検討してみてはどうでしょうか。 後、DB2、SQLSERVER 2005の再帰SQLでも取得できると思います。 |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/14 17:48 回答番号:No.4 |
|
| この回答への補足 | ご回答感謝です。まさしくOracleにデータを格納しているのですが、階層型SQLというのを良ければもう少し詳しく教えていただけないでしょうか? |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| 回答者:assault852 | >グループ2の「山田太郎」で検索 ⇒ >グループ1「購買係」「掃除当番」を抽出 >抽出した「購買係」「掃除当番」をグループ2の検索対象として >グループ1「営業課」を抽出 >抽出した内容をさらに検索対象・・・・・・ >という内容です。 やりたいことはわかりましたが、そんな正規化されていないテーブルにしなけりゃ駄目なんでしょうか? 階層にしたいなら、テーブルを分けるべきかと思いますが。 批判的意見で申し訳ない。 |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/13 23:28 回答番号:No.3 |
|
| この回答への補足 | 実質的な階層が4〜8程度あるのですがテーブルを分けるとなるとどのように分けると良いでしょう? |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| 回答者:mako_sea | 階層があるようですね。 最大いくつまで階層がありえるのか、 それとも無制限なのかお聞かせ願えますか? 制限があれば苦しいけど無理矢理なセルフジョインで できそうな気がしてます。 |
|---|---|
| 種類:補足要求 どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/13 13:07 回答番号:No.2 |
|
| この回答への補足 | 階層制限は特になく実質無制限なのですが、実際の階層としましては最大でも8階層で運用上これ以上深い階層は持たない形です。 どうかよろしくお願いします。 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| 回答者:assault852 | データの例とやりたいことが、さっぱりかみ合わないのですが・・ グループ1に「山田太郎」はありませんよね? グループ2だとしても、紐付くグループ1は「購買係」「掃除当番」だけ・・ 私がおかしいですか? |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/13 11:29 回答番号:No.1 |
|
| この回答への補足 | 申し訳ございません。私が間違っておりました。ご指摘のとおり検索対象は「グループ1」ではなく「グループ2」です。 グループ2の「山田太郎」で検索 ⇒ グループ1「購買係」「掃除当番」を抽出 抽出した「購買係」「掃除当番」をグループ2の検索対象として グループ1「営業課」を抽出 抽出した内容をさらに検索対象・・・・・・ という内容です。 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |