日期:2014-05-16  浏览次数:20590 次

求问一个特殊的分组问题
按照两个字段a,b作分组。要求:a相同或b相同的分为一组。注意:有传递性!
例如下面这张表:
/*
ID a b
1  1  2
2  2  3
3  1  3
*/
由于第1行和第3行的a相同,第2行和第3行的b相同,因此这三行应分为1组。

我现在的做法是一个存储过程:
1. 取出一条数据,记为A。将A放入结果集R中;
2. 取出表中与A a相同或b相同的数据,记为B。将B放入结果集R中;
3. 令A=B。重复2,3,直到得到的B为空集。至此,完整的取出了一个分组。
4. 重复1,2,3,直到原表中所有数据都被取出,得到所有分组。

这解法类似于用广度优先遍历求图的连通子集。想问问各位大神,有没有更简便的方法?
------解决方案--------------------
想不到更简洁的方法了,具体代码可能能够优化。
------解决方案--------------------
必须要循环 没有什么简单的了。