2008-12-19 48 views
1

我有一個代表從另一個表ID之間的一系列比賽如下表:聯比賽的團體

CREATE TABLE #matches (
    asid1 int, 
    asid2 int 
) 

insert into #matches values (1,2) 
insert into #matches values (1,3) 
insert into #matches values (3,1) 
insert into #matches values (3,4) 
insert into #matches values (7,6) 
insert into #matches values (5,7) 
insert into #matches values (8,1) 
insert into #matches values (1,8) 
insert into #matches values (8,9) 
insert into #matches values (8,3) 
insert into #matches values (10,11) 
insert into #matches values (12,10) 

,我想找到直接或間接與彼此匹配的組。

輸出應該是這樣的:

group asid 
1  1 
1  2 
1  3 
1  4 
1  8 
1  9 
2  5 
2  6 
2  7 
3  10 
3  11 
3  12 

如果我添加其他行:

insert into #matches values (7,8) 

那麼這將意味着上述各組的2將被鏈接,所以我會要求輸出:

group asid 
1  1 
1  2 
1  3 
1  4 
1  5 
1  6 
1  7 
1  8 
1  9 
2  10 
2  11 
2  12 

任何想法?

編輯:進一步的研究使我相信,遞歸公用表表達式應​​該做的伎倆...如果我什麼事情弄清楚優雅我會後

回答

1

看來,一個Disjoint-set是你需要什麼解決此問題。這是一個C#和C++實現的listing

+0

這個算法原來就是我們之後的事情。非常感謝您指引我朝着正確的方向發展。 sql版本仍在等待:) – spender 2009-04-10 04:41:56

+0

沒問題!我必須在大學裏實現我自己的C++版本。這是我記住甚至是唯一的原因。 – EndangeredMassa 2009-04-10 14:36:13

0

如果這可以在SQL中完成,那將是非常困難的。您應該使用您使用的任何編程語言來分析該表格。