SQL Server 2012 を使用しています
LOCATIONDETAIL テーブル
OID LOCATIONNAME PARENTID
1 GLOBAL 0
2 NORTH 1
3 SOUTH 1
4 NORTH1 2
5 SOUTH1 3
LOCATIONSITECONFIG テーブル
OID LOCATIONID SITENAME
1 2 TEST
再帰 CTE クエリを使用します
;WITH LOCALSITEHIERARCHY AS
(
SELECT A.OID
,A.PARENTOID
,CAST(A.LOCATIONNAME + ' ( ' + LSC.SITENAME + ' )' AS NVARCHAR(100)) AS NAME
,LSC.OID AS SITEOID
FROM LOCATIONDETAIL A
INNER JOIN LOCATIONSITECONFIG LSC
ON LSC.LOCATIONDETAILOID = A.OID
WHERE
LSC.SITENAME <> 'GLOBAL' AND LSC.RECSTATUS = 'A'
UNION ALL
SELECT
A.OID
,A.PARENTOID
,CAST(A.LOCATIONNAME AS NVARCHAR(100))
,LH.SITEOID
FROM LOCATIONDETAIL A
INNER JOIN LOCALSITEHIERARCHY LH ON A.PARENTOID = LH.OID
)
SELECT * FROM LOCALSITEHIERARCHY
NORTH は Global の別のサイトになりました。このクエリは、OK であるツリー構造で North と North 1 を返します。
Global を新しいサイトとして作成するとき、North を Global サイトの一部として含めたくありません。
例 、グローバルである (NEWTEST) という名前のサイト 2 を追加する
LOCATIONSITECONFIG テーブル
OID LOCATIONDETAILOID SITENAME
1 2 TEST
2 1 NEWTEST
上記のクエリは、Global 、NORTH、NORTH1、SOUTH、SOUTH1、および NORTH(TEST) AND NORTH1 (レコードの複製) を返します。
クエリで Global 、NORTH (TEST)、NORTH1、SOUTH、SOUTH1 を返すようにしたい
子サイトが既に作成されている場合、クエリは無視する必要があります。助けてください