私はリージョンとサブリージョンの階層テーブルを持っていますが、簡単にはリージョンとサブリージョンのツリーをリストする必要がありますまた、各地域ごとに、その地域のすべてのIDを表示する列が必要です。例えばカテゴリ/サブカテゴリのツリーを表示し、そのサブカテゴリを同じ行に表示する
: 、I領域の行のものを()検索関数を作成してそれを行っている
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 name superiorId
-------------------------------
1 RJ NULL
2 Tijuca 1
3 Leblon 1
4 Gavea 2
5 Humaita 2
6 Barra 4
Iのようなものであるとの結果を必要たとえば、ある国からすべての地域を選択すると、各地域の地域の息子を取得するための関数を実行するため、クエリは本当に遅くなります。
誰もが最適化された方法でそれを取得する方法を知っていますか?
「行としてすべてのIDを取得する」という機能がある:
I関数はカンマで区切られた文字列として全てのサブ領域の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
これは意味をなさない。 2番目の "RJ"は "TJ"とされていますか?あなたのサンプル出力の "RJ"は2〜6のサブリージョンを持っていますが、 "RJ"にも接続する7,8,9は含まれていません。データをクリーンアップして、おそらく助けることができます。 – mwigdahl
申し訳ありません。私は編集時にそれを台無しにしてしまった...固定されている –