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

3

假设我们有一个带有典型的“管理者id”递归关系的表:

用户 用户id int 管理者id int (引用用户id)

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

2个回答

3
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

h.parent,在选择之前非常微小的:) 谢谢原始答案 - Andy

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接