1

我的问题接近父子问题,可能需要一些递归查询,但我通过浏览论坛没有找到任何答案。这是我的问题:我有 3 张桌子:

T1(人) T2(地点) T3(A 和 B 之间的关系)
-------- ------ --------
id1 (pk) id2 (pk) id3 (pk)
名称城市id_A
                            id_B

我想确定相关的地点和人员组。例如,如果
约翰访问伦敦和巴黎,
玛丽访问巴黎和纽约,
彼得访问班加罗尔和东京,
我想将相同的组代码影响到玛丽、约翰、巴黎、伦敦和纽约,并将另一个组代码影响到彼得,东京和班加罗尔。

我真的不知道如何用 sql 来做到这一点。任何想法?

谢谢

4

1 回答 1

1

这个问题是“寻找孤立的子图”。

这是一个非常简单的问题,尽管它不能通过单个SQL查询有效地解决。

编写一个简单的存储过程非常容易:

  1. 创建临时表:

    group_id   city_id
    
  2. 对于每个城市,查找group_id其所有邻居(该城市的访客也访问过的所有其他城市)

  3. 如果邻居属于不同group_id的 ',则更新临时表,将所有group_id' 设置为集合中的最小一个。

  4. 将新的城市插入group_id临时表。

于 2010-05-07T09:38:44.473 回答