树形结构数据查找某一节点(包含该节点)下所有子节点的sql server2000

当我点击1-3这个父节点 查找子节点下pk_ID 关联的表 hv_PartsInputSub mainID 的所有数据 (不用精确到子节点 【场地】点击 才根据 mainid 查询到数据)

图片说明
图片说明

这个只能先查询父节点数据后,再执行子查询进行获取子节点的数据啊。如果子节点深度较深的话,性能可能是个问题啊。

如果想优化查询,需要从表设计优化了,追加一张表:子节点ID,对应父节点ID (一对多,一个子节点对应的所有的父节点,一个为一条)。多这张表比较容易实现你的需求。

/****** Object: UserDefinedFunction [dbo].[QueryClubByChild] Script Date: 2018/4/24 13:57:54 ******/
/****** 根据父级俱乐部ID获取子俱乐部ID ******/
/****** Param:父级俱乐部Id ******/
/****** Return:子俱乐部Id ******/
ALTER FUNCTION [dbo].QueryClubByParent
RETURNS @childrenIdTab TABLE(id INT)
AS
BEGIN

WITH CHILDREN_CTE(ClubId,ParentId,tLevel)
AS
(
--基本语句
SELECT ClubId,ParentId,0 AS tLevel FROM dbo.T_ClubRelation
WHERE ParentId = @parentId
UNION ALL --递归语句
SELECT c.ClubId,c.ParentId,ce.tLevel + 1 FROM T_ClubRelation AS c
INNER JOIN CHILDREN_CTE AS ce --递归查询
ON c.ParentId = ce.ClubId
)INSERT INTO @childrenIdTab(id) SELECT ClubId FROM CHILDREN_CTE;

RETURN;

可以参考一下