列出类别/子类别树并在同一行中显示其子类别
我有一个区域和子区域的分层表,我需要列出区域和子区域(这很容易)的树,但另外,我需要一个列,显示每个区域的所有子区域的ID。列出类别/子类别树并在同一行中显示其子类别
例如:
id name superiorId
-------------------------------
1 RJ NULL
2 Tijuca 1
3 Leblon 1
4 Gavea 2
5 Humaita 2
6 Barra 4
我需要的结果是这样的:
id name superiorId sub-regions
-----------------------------------------
1 RJ NULL 2,3,4,5,6
2 Tijuca 1 4,5,6
3 Leblon 1 null
4 Gavea 2 4
5 Humaita 2 null
6 Barra 4 null
我这样做,是通过创建检索区域行的东西()的函数, 但是当我从一个国家选择所有区域时,例如,查询变得非常慢,因为我执行函数来获取每个区域的区域儿子。
有谁知道如何以优化的方式获得?
说,“检索所有的ID作为行”的功能是:
我的意思是,函数返回所有的子区域的ID作为一个字符串,用逗号分隔。 功能是:
CREATE FUNCTION getSubRegions (@RegionId int)
RETURNS TABLE
AS
RETURN(
select stuff((SELECT CAST(wine_reg.wine_reg_id as varchar)+','
from (select wine_reg_id
, wine_reg_name
, wine_region_superior
from wine_region as t1
where wine_region_superior = @RegionId
or exists
(select *
from wine_region as t2
where wine_reg_id = t1.wine_region_superior
and (
wine_region_superior = @RegionId
)
)) wine_reg
ORDER BY wine_reg.wine_reg_name ASC for XML path('')),1,0,'')as Sons)
GO
当我们使用的数据库,以使这些连接的列表中,我们采取了类似的方法来你在第一
在做那么当我们寻找速度
we made them into CLR functions
http://msdn.microsoft.com/en-US/library/a8s4s5dz(v=VS.90).aspx
现在我们的数据库只负责存储和检索数据
this sort of thing will be in our data layer in the application
我无法想象一种快速实现这一点的方法,即使在应用程序层,我想要的东西需要一些时间来处理。 有了这个列对我来说会很棒,因为我要用这些信息序列化一个json对象。 – 2011-12-28 12:21:09
您是否尝试使其成为CLR功能?你的域名使用什么编程语言? – 2011-12-28 13:27:47
你是什么意思的CRL功能?我创建了上面的一个(getSubRegions),它返回每个区域的所有子区域。 我在Coldfusion编程。应用程序调用查询并处理结果以构建我需要的JSON文件。但我也可以使用Java。 – 2011-12-28 16:09:20
这不太合理。第二个“RJ”应该是“TJ”吗?为什么样本输出中的“RJ”具有2到6的子区域,但不包括也连接到“RJ”的7,8和9?清理数据,也许我们可以提供帮助。 – mwigdahl 2011-12-27 19:31:24
对不起。编辑时我搞砸了......这是固定的 – 2011-12-28 12:27:37