sql - 如何在递归表(SQL)中获取 2 行的最低公共(public)父级

标签 sql sql-server-2005 tsql recursion

假设我们有一个具有经典“经理 ID”递归关系的表:

用户 user_id 整数 manager_id int(指user_id)

如果您随机选择表中的 2 行或 2 个节点,您如何找到最低级别的共同祖先?我的平台是 SQL Server 2005 (Transact-SQL),但任何符合 ANSI 标准的 SQL 也可以工作...

最佳答案

对 Quassnoi 的答案进行了一些小的修改,它起作用了:

WITH
    hier1 (id, parent) AS (
    SELECT      id, parent
    FROM        table
    WHERE       id = @user1
    UNION ALL
    SELECT      id, parent
    FROM        table l, hier1 h
    WHERE       l.id = h.parent
    ),
    hier2 (id, parent) AS (
    SELECT      id, parent
    FROM        table
    WHERE       id = @user2
    UNION ALL
    SELECT      id, parent
    FROM        table l, hier1 h
    WHERE       l.id = h.parent
    )
SELECT  TOP 1 hier1.id
FROM    hier1, hier2
WHERE   hier1.id = hier2.id

关于sql - 如何在递归表(SQL)中获取 2 行的最低公共(public)父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/608076/

相关文章:

sql-server - 在 T-SQL 中获取基于货币的单个总金额

c# - SQL 语法错误(INSERT 命令)

sql - 按来源统计每次购买前 30 天的访问量

sql-server - 从远程服务器上的另一个作业调用 SQL 代理作业?

sql - "Schema changed after the target table was created"错误是如何发生的?

sql-server - Hibernate Query在系统中运行缓慢,但直接运行时速度很快

c# - 调用同一个 sql server 2005 存储过程的多个 asp.net 请求

sql - 使用INSERT-OUTPUT为另一个INSERT提供值

c# - 使用 Code-First MVC5 EF6 在 SQL 表中存储 DateTime 属性而不是字节数组

java - Spring 安全 "authorities-by-username-query"错误