我有一张像这样的桌子
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
警告一句,树可以是多层次的,而不仅仅是我上面简化的几个层次。所以我认为查询需要以某种方式递归?
答案 0 :(得分: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)
答案 1 :(得分: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