我正在使用SQL Server。
我有一个包含两个整数列的表:
MEGR_KEY
MEGR_KEY1
MEGR_KEY
是群组的主要关键。每个组都可以有子组。
例如 - 我有一个小组1195:
MEGR_KEY
= 1195
有1195个小组:
MEGR_KEY = 9484
MEGR_KEY1 = 1195
和
MEGR_KEY = 7494
MEGR_KEY1 = 1195
基本上MEGR_KEY1
告诉我,哪个群组是父母。
我遇到的问题是,如果只给出根组名称,如何分层查找所有MEGR_KEY
个子组?让我们说(从前面的例子)有1195个根组。已经有两个子组:7494和9484.现在,这两个子组也可以是其他组的父组。所以,我必须找到MEGR_KEY1
= 7494或MEGR_KEY1
= 9484的行。如果给出组号(MEGR_KEY),如何查找所有子组?我在这里写一个问题。
答案 0 :(得分:2)
对于你的情况,让我们构建架构
CREATE TABLE #TAB (MEGR_KEY INT, NAME VARCHAR(50), MEGR_KEY1 INT)
INSERT INTO #TAB
SELECT 19 , 'Name1' , 0
UNION ALL
SELECT 20 ,'Name2' , 19
UNION ALL
SELECT 21 , 'Name3' , 20
UNION ALL
SELECT 22 , 'Name4' , 21
UNION ALL
SELECT 23 , 'Name5' , 21
UNION ALL
SELECT 26 , 'Name6' , 19
UNION ALL
SELECT 28 , 'Name7' , 0
UNION ALL
SELECT 29 , 'Name7' , 18
UNION ALL
SELECT 30 , 'Name8' , 18
现在查询表(我递归地接受了CTE)
DECLARE @MEGR_KEY INT=19;
;WITH CTE AS(
SELECT * FROM #TAB WHERE MEGR_KEY= @MEGR_KEY
UNION ALL
SELECT T.* FROM #TAB T
INNER JOIN CTE C ON T.MEGR_KEY1 = C.MEGR_KEY
)
SELECT * FROM CTE
结果将是