は、我々は、我々は古典的な「管理者ID」再帰的な関係を持つテーブルを持っている持っているとしましょう再帰テーブル(SQL)で2行のために最低、共通の親を取得するにはどのよう
テーブルまたは2ノードで2行をランダムに選択すると、どのようにして最も低いレベルの共通の祖先が見つかりますか?私のプラットフォームは、SQL Server 2005(のTransact-SQL)であるが、任意のANSI準拠したSQLも動作します...
は、我々は、我々は古典的な「管理者ID」再帰的な関係を持つテーブルを持っている持っているとしましょう再帰テーブル(SQL)で2行のために最低、共通の親を取得するにはどのよう
テーブルまたは2ノードで2行をランダムに選択すると、どのようにして最も低いレベルの共通の祖先が見つかりますか?私のプラットフォームは、SQL Server 2005(のTransact-SQL)であるが、任意のANSI準拠したSQLも動作します...
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
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
をした何編集?私は違いが見えません:) – Quassnoi
h.parent 非常にマイナー:)元の答えをありがとう –