≪ ≪ HTCのパスからの相対パスでスクリプトをリンク ソフ開 ≫ ≫

ツリー構造のテーブルにSQLって書けるのか?

という事を調べてみた。

1.SQL99からあるらしい。

http://www.atmarkit.co.jp/fnetwork/tokusyuu/01sql99/sql99_1b.html

↓↓↓↓ こんな書き方だそうな ↓↓↓↓↓

WITH RECURSIVE 中間表(親品番, 子品番, 所要数) AS

( SELECT PP.親品番, PP.子品番, PP.所要数 FROM 部品構成表 PP

WHERE PP.親品番=’自転車’

UNION ALL

SELECT PP.親品番, PP.子品番, PP.所要数*中間表.所要数

FROM 中間部品表, 部品構成表 pp

WHERE pp.親品番=中間表.子品番

SELECT 親品番, 子品番, 所要数

FROM 中間表;

↑↑↑↑↑ こんな書き方だそうな ↑↑↑↑↑

※中間表が、再帰呼び出しされている点がミソ。

2.SQLServerは、2005から実装されるらしい。

http://www.microsoft.com/japan/msdn/sqlserver/dnsql90/sql_YukonTSQLEnhance.

asp

↓↓↓↓ こんな書き方だそうな ↓↓↓↓↓

WITH EmpCTE(empid, empname, mgrid, lvl)

AS

(

– Anchor Member (AM)

SELECT empid, empname, mgrid, 0

FROM Employees

WHERE empid = 7

UNION ALL

– Recursive Member (RM)

SELECT E.empid, E.empname, E.mgrid, M.lvl+1

FROM Employees AS E

JOIN EmpCTE AS M

ON E.mgrid = M.empid

)

SELECT * FROM EmpCTE

↑↑↑↑↑ こんな書き方だそうな ↑↑↑↑↑

※EmpCTEが、再帰呼び出しされている点がミソ。

※SQLServer2000だと無理なので、ファンクションの

 再帰呼び出しで書いてみた所、動いたが

 デバッグとか循環参照チェックとか面倒。。

3.Oracleでは、「SQLリファレンス」の”階層問合せ”で実装できるそうな。

↓↓↓↓ こんな書き方だそうな ↓↓↓↓↓

select *

from TABLE

start with currentKey=’key1′

connect by prior childKey = currentKey

↑↑↑↑↑ こんな書き方だそうな ↑↑↑↑↑

※最後の2行がミソ

4.結果

 今回は、OracleとSQLServer両対応したかったので、

使うのを止めた。プログラム側で対応。。

SQLServer2005が前提ならば使ったかも。。

≪ ≪ HTCのパスからの相対パスでスクリプトをリンク ソフ開 ≫ ≫

関連記事

Google Ads

Leave a Reply

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>