1

私はそのようなテーブルを持っています

id          parent          title

1           NULL            Cars
2           1               Ford
3           2               Hatchback
4           2               Saloon
5           3               Fiesta
6           4               Mondeo  

特定の ID のサブノードのリストを返すクエリが必要です。

たとえば、id 2 のすべてのサブノードが必要な場合は、次のようになります。

3           2               Hatchback
4           2               Saloon
5           3               Fiesta
6           4               Mondeo  

ID 3 のすべてのサブノードが必要な場合は、

5           3               Fiesta

警告の言葉、ツリーは、上で示した単純化のいくつかのレベルだけでなく、多くのレベルの深さになる可能性があります。それで、クエリは何らかの方法で再帰的である必要があると思いますか?

4

2 に答える 2

1

再帰クエリを使用する必要があります。

with T1 as
(  select t.* from t where parent=2
   union all
   select t.* from t 
     join T1 on (t.parent=T1.id)
)
select * from T1

SqlFiddle のデモ

于 2013-07-25T12:42:56.323 に答える
1

テーブル値関数を作成できます。

CREATE FUNCTION [ftChildren]
(
    @id int
)
RETURNS TABLE
AS RETURN
    WITH Tree(Parent, Title, ID)
    AS
    (
        SELECT Parent, Title, ID
        FROM TableName
        WHERE ID = @id
        UNION ALL
        SELECT s.Parent, s.Title, s.ID
        FROM TableName s JOIN Tree t ON t.ID = s.Parent
    )
    SELECT ID, Parent, Title
    FROM Tree
    WHERE ID != @id
GO

そしてそれを次のように使用します:

select * from ftChildren(2)
于 2013-07-25T12:40:50.217 に答える