You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MSSQL中如何查询用户所有上级?自连接查询失效求助

解决层级用户表的上级递归查询问题

嘿,我一眼就看出你原SQL的问题啦——你写的自连接条件找的是和用户4拥有同一个上级的平级用户,而不是向上追溯的上级节点!咱们来一步步修正这个问题。

先明确你的数据表结构:

UserIDNameupline
1John0
2James1
3Geena2
4Andy3

你的需求是获取UserID=4的所有上级(也就是John、James、Geena这三位),这种层级递归查询最适合用**递归CTE(公共表表达式)**来实现,因为它能循环向上遍历每一层的上级节点。

正确的SQL查询语句

WITH RecursiveUpline AS (
    -- 锚点成员:先定位目标用户(UserID=4)的直接上级
    SELECT u.UserID, u.Name, u.upline
    FROM UserAgent u
    WHERE u.UserID = (SELECT upline FROM UserAgent WHERE UserID = 4)
    UNION ALL
    -- 递归成员:继续向上查找当前节点的上级,直到根节点(upline=0)
    SELECT parent.UserID, parent.Name, parent.upline
    FROM UserAgent parent
    INNER JOIN RecursiveUpline child ON parent.UserID = child.upline
    WHERE parent.upline != 0
)
-- 最后取出所有上级的UserID和Name
SELECT UserID, Name FROM RecursiveUpline;

解释一下这段代码:

  • 锚点成员:先找到UserID=4的直接上级(也就是UserID=3的Geena),作为递归的起点。
  • 递归成员:每次把当前节点的upline作为父节点的UserID,向上查询父节点信息,直到父节点的upline=0(也就是根节点John)时停止。
  • 执行这个查询后,你就能得到UserID=4的全部3位上级数据:
    UserIDName
    3Geena
    2James
    1John

为什么你的原SQL没得到结果?

你原SQL的连接条件是A.upline = u.upline,当u.UserID=4时,u.upline=3,所以这条语句是找所有upline=3的用户——但你的表中只有UserID=4的upline是3,自然没有匹配的结果啦。

内容的提问来源于stack exchange,提问作者abc cba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:15:50