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

解決済みの質問

ツリー情報のデータをSQLで取得したい

SQLServer 2008 です。

以下のツリーデータの場合に

A ┬C
│├D ┬H
││ ├I
││ └J
│└E
B ┬F ┬I
 │ └L
 └G

次のようなデータを登録しています。
┌──┬──┬──┐
│OYA │KO │Data│
├──┼──┼──┤
│A │C  │"C" │
├──┼──┼──┤
│A  │D  │"D" │
├──┼──┼──┤
│A  │E  │"E" │
├──┼──┼──┤
│B  │F  │"F" │
├──┼──┼──┤
│B  │G  │"G" │
├──┼──┼──┤
│D  │H  │"H" │
├──┼──┼──┤
│D  │I  │"I" │
├──┼──┼──┤
│D  │J  │"J" │
├──┼──┼──┤
│F  │I  │"I" │
├──┼──┼──┤
│F  │L  │"L" │
└──┴──┴──┘

引数OYA="A"でSQLを実行した場合に
以下のような
この引数を含むそれ以下のツリーに関する
データを取得する方法を教えてください。

┌──┬──┬──┐
│OYA │KO │Data│
├──┼──┼──┤
│A │C  │"C" │
├──┼──┼──┤
│A  │D  │"D" │
├──┼──┼──┤
│A  │E  │"E" │
├──┼──┼──┤
│D  │H  │"H" │
├──┼──┼──┤
│D  │I  │"I" │
├──┼──┼──┤
│D  │J  │"J" │
└──┴──┴──┘

投稿日時 - 2014-06-12 14:25:12

QNo.8634329

困ってます

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

再帰SQL(クエリ)の出番だと思いますが、持ち合わせていないので
リンクだけです。ご勘弁。
http://www.atmarkit.co.jp/fnetwork/tokusyuu/01sql99/sql99_1b.html

投稿日時 - 2014-06-12 23:03:21

補足

ありがとうございます。

説明と同様に、テーブルを作成し、
同じデータを登録しました。

---------
照会1:
WITH RECURSIVE 中間表(親品番, 子品番, 所要数) AS
( SELECT PP.親品番, PP.子品番, PP.所要数 FROM 部品構成表 PP
WHERE PP.親品番='自転車'
UNION ALL
SELECT PP.親品番, PP.子品番, PP.所要数*中間表.所要数
FROM 中間部品表, 部品構成表 pp
WHERE pp.親品番=中間表.子品番
)
SELECT 親品番, 子品番, 所要数
FROM 中間表;
---------

上記を実行すると
以下のエラーが発生しました。

----------
メッセージ 102、レベル 15、状態 1、行 2
'RECURSIVE' 付近に不適切な構文があります。
----------

理由がわかりません。
教えてもらえないでしょうか?

投稿日時 - 2014-06-13 09:44:31

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

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

回答(3)

ANo.3

残念ながら
>持ち合わせていないので
検証できる環境がありません。
識者のご登場をお待ちください。

投稿日時 - 2014-06-13 12:50:08

補足

どうもありがとうございました。

いろいろ調べてわかりました。
どうやら、SQLServer2008では RECURSIVE を
使用することができないようです。

WITH [CTE] (親品番, 子品番, 所要数)

として使用するみたいですね。
なんとか動作するようになりました。

ありがとうございました。

投稿日時 - 2014-06-13 15:07:46

ANo.1

SELECT * FROM Table
WHERE OYA='A'
OR OYA IN (SELECT KO FROM Table WHERE OYA='A')

投稿日時 - 2014-06-12 15:01:50

補足

ありがとうございます。

説明不足でもうしわけありません。
確かに、質問と同じ結果が出ましたが、
ほしいのは

>この引数を含むそれ以下のツリーに関する
>データを取得する方法

ですので、

A ┬C
│├D ┬H ┬K
││ │ └L
││ ├I
││ └J
│└E
B ┬F ┬I
 │ └L
 └G
このような場合

OYA KO Data
--------------
H  K  K
H  L  L

も取得できるようにしたいのです
どうもすみませんでした。

投稿日時 - 2014-06-12 18:39:24

あなたにオススメの質問