假设我们有一个带有典型的“管理者id”递归关系的表:
用户 用户id int 管理者id int (引用用户id)
如果您随机选择表中的2行或2个节点,如何找到最低级别的公共祖先?我使用的是SQL Server 2005(Transact-SQL),但任何符合ANSI标准的SQL也可以使用...
假设我们有一个带有典型的“管理者id”递归关系的表:
用户 用户id int 管理者id int (引用用户id)
如果您随机选择表中的2行或2个节点,如何找到最低级别的公共祖先?我使用的是SQL Server 2005(Transact-SQL),但任何符合ANSI标准的SQL也可以使用...
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
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