C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 155 を表示中)
■89899 / )  Re[1]: SQLでのデータ取得方法について
□投稿者/ 魔界の仮面弁士 (2011回)-(2019/01/15(Tue) 19:44:35)
No89895 (ルパン さん) に返信
> DECLARE @PNAME VARCHAR(20) = 'A';
どのデータベース製品のどのバージョンを
用いているのかも示した方が良いですよ。


> 以下のような感じでデータがある場合に
元データには 'C' - 'F' のノードもあるのですよね?
条件から漏れているので抽出されないというだけで。



> また、とってきたデータが以下の順番でとってこれますか?
あまり検証してないですが、これでどうかな…。
とりあえず、手元にあった SQL Server 2008 R2 で組んでみました。


CREATE TABLE M_TREE
( PNAME VARCHAR(20) NOT NULL
, CNAME VARCHAR(20) NOT NULL
, CONSTRAINT PX_M_TREE PRIMARY KEY (PNAME, CNAME)
);

INSERT INTO M_TREE VALUES
('A', 'B'),
('A', 'E'),
('B', 'E'),
('C', 'F'),
('E', 'G'),
('E', 'H');

DECLARE @PNAME VARCHAR(20) = 'A';
DECLARE @SEPARATOR CHAR(1) = '/';


WITH CTE (PNAME, CNAME, DEPTH, PATH) AS (
SELECT PNAME, CNAME, 1, CAST(PNAME + @SEPARATOR + CNAME AS VARCHAR(MAX))
FROM M_TREE WHERE PNAME = @PNAME
UNION ALL
SELECT T2.PNAME, T2.CNAME, CTE.DEPTH + 1, CTE.PATH + @SEPARATOR + T2.CNAME
FROM M_TREE AS T2 INNER JOIN CTE ON CTE.CNAME = T2.PNAME
) SELECT * FROM CTE ORDER BY PATH;

返信 編集キー/


管理者用

- Child Tree -