sql-server – 递归地发现给定孩子的所有祖先
发布时间:2020-12-12 16:55:39 所属栏目:MsSql教程 来源:网络整理
导读:给定一个子代码,我需要返回一个包含该孩子的所有父母以及他们的父母的查询,直到找到父父母. 例如,给出这个数据: ID / Parent ID1 / 02 / 13 / 24 / 05 / 3 所以如果我通过了ID 5,我想得到一个查询与结果: ID / Parent ID1 / 02 / 13 / 2 这个表不适用于层次
给定一个子代码,我需要返回一个包含该孩子的所有父母以及他们的父母的查询,直到找到父父母.
例如,给出这个数据: ID / Parent ID 1 / 0 2 / 1 3 / 2 4 / 0 5 / 3 所以如果我通过了ID 5,我想得到一个查询与结果: ID / Parent ID 1 / 0 2 / 1 3 / 2 这个表不适用于层次结构类型,所以我怀疑这需要用CTE来完成,但是没有线索.如果可以在SQL查询/ proc中完成,任何帮助将不胜感激. 谢谢 解决方法这或多或少是你想要的:-- CTE to prepare hierarchical result set ;WITH #results AS ( SELECT id,parentid FROM [table] WHERE id = @childId UNION ALL SELECT t.id,t.parentid FROM [table] t INNER JOIN #results r ON r.parentid = t.id ) SELECT * FROM #results; 参考: > CTE: Common Table Expression 工作实例: -- create table with self lookup (parent id) CREATE TABLE #tmp (id INT,parentid INT); -- insert some test data INSERT INTO #tmp (id,parentid) SELECT 1,0 UNION ALL SELECT 2,1 UNION ALL SELECT 3,2 UNION ALL SELECT 4,0 UNION ALL SELECT 5,3; -- prepare the child item to look up DECLARE @childId INT; SET @childId = 5; -- build the CTE WITH #results AS ( SELECT id,parentid FROM #tmp WHERE id = @childId UNION ALL SELECT t.id,t.parentid FROM #tmp t INNER JOIN #results r ON r.parentid = t.id ) -- output the results SELECT * FROM #results WHERE id != @childId ORDER BY id; -- cleanup DROP TABLE #tmp; 输出: 1 | 02 | 13 | 2 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |