我使用的是SQL Server 2012的递归CTE SQL(亲子)
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现在是一个sep在Global.Arate站点中查询返回North和North 1的树形结构,这是可以的。
当我将Global设为新网站时,我不想将North列为全球网站的一部分。
例如,添加部位2命名(NEWTEST),其是全球
LOCATIONSITECONFIG表
OID LOCATIONDETAILOID SITENAME
1 2 TEST
2 1 NEWTEST
上述查询返回 全球,NORTH,NORTH1,SOUTH SOUTH1 并再次NORTH(TEST )AND NORTH1(重复的记录)
我想要查询返回 全局,北(测试),NORTH1,南,南1
如果孩子已经创建了网站,查询应该忽略。请帮助
你想返回GLOBAL(NEWTEST),北(TEST),NORTH1,SOUTH SOUTH1? –