プロが教えるわが家の防犯対策術!

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" │
└──┴──┴──┘

A 回答 (3件)

再帰SQL(クエリ)の出番だと思いますが、持ち合わせていないので


リンクだけです。ご勘弁。
http://www.atmarkit.co.jp/fnetwork/tokusyuu/01sq …

この回答への補足

ありがとうございます。

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

---------
照会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
    • good
    • 1

残念ながら


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

この回答への補足

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

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

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

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

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

補足日時:2014/06/13 15:07
    • good
    • 0

SELECT * FROM Table


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

この回答への補足

ありがとうございます。

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

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

ですので、

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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す