У меня есть иерархическая таблица регионов и субрегионов, и мне нужно перечислить дерево регионов и субрегионов (что легко), но также мне нужен столбец, который отображает для каждого региона всеидентификаторы его субрегионов.
Например:
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
Я сделал это, создав функциюэто возвращает STUFF () строки региона, но когда я, например, выбираю все регионы из страны, запрос становится очень, очень медленным, так как я выполняю функцию, чтобы получить сыновей региона для каждого региона.
Кто-нибудь знает, как получить это оптимизированным способом?
Функция, которая "извлекает все идентификаторы в виде строки":
Я имел в виду, что функция возвращает всеидентификаторы субрегиона в виде строки, разделенные запятой.Функция:
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