如何判断用户是否属于同一层级树或存在直接父子关系?
解决方案
一、判断两个用户是否存在直接父子关系
直接通过查询用户表的Parent_ID字段即可验证,无需递归。以下SQL可直接返回判断结果:
-- 替换其中的'USER_A'和'USER_B'为要验证的两个用户ID SELECT CASE WHEN EXISTS (SELECT 1 FROM user_table WHERE User_id = 'USER_B' AND Parent_ID = 'USER_A') THEN '是直接父子关系(USER_A是USER_B的父节点)' WHEN EXISTS (SELECT 1 FROM user_table WHERE User_id = 'USER_A' AND Parent_ID = 'USER_B') THEN '是直接父子关系(USER_B是USER_A的父节点)' ELSE '无直接父子关系' END AS 关系判断结果;
二、验证一组用户ID是否属于同一团队(同一树层级)
利用递归CTE向上追溯每个用户的根节点(即最顶层Parent_ID为空的节点),若所有用户的根节点一致,则属于同一团队。
示例SQL
-- 替换IN子句中的用户ID列表为需要验证的集合 WITH RECURSIVE user_hierarchy AS ( -- 初始层:选中待验证的用户 SELECT User_id, Parent_ID FROM user_table WHERE User_id IN ('2','3','4') UNION ALL -- 递归层:向上遍历父节点,直到父节点为空 SELECT uh.User_id, ut.Parent_ID FROM user_hierarchy uh JOIN user_table ut ON uh.Parent_ID = ut.User_id WHERE ut.Parent_ID IS NOT NULL ) -- 统计所有用户的根节点数量,判断是否一致 SELECT CASE WHEN COUNT(DISTINCT root.root_id) = 1 THEN '同一团队' ELSE '非同一团队' END AS 团队验证结果 FROM ( -- 获取每个用户对应的根节点ID SELECT uh.User_id, ut.User_id AS root_id FROM user_hierarchy uh JOIN user_table ut ON uh.Parent_ID = ut.User_id WHERE ut.Parent_ID IS NULL ) root;
结果说明
- 输入
[2,3,4]时,三个用户的根节点均为1,返回同一团队 - 输入
[2,3,7]时,2、3的根节点是1,7的根节点是6,根节点不唯一,返回非同一团队
内容的提问来源于stack exchange,提问作者AKS
相关产品推荐
相关产品推荐

