使用sql在多对多结构中查找关系

时间:2010-05-07 09:09:20

标签: sql many-to-many recursive-query

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

T1 (people)      T2 (places)  T3 (relationship betwenn A and B)
-------         ------      --------
id1 (pk)        id2 (pk)    id3 (pk)
name            city        id_A
                            id_B 

我想确定相关的地方和人群。 例如,如果是 约翰访问伦敦和巴黎,
玛丽访问巴黎和纽约,
彼得访问班加罗尔和东京,
我想影响Mary,John,Paris,London和New York的相同组代码,以及Peter,Tokyo和Bangalore的另一组代码。

我真的不知道怎么用sql做这个。有什么想法吗?

由于

1 个答案:

答案 0 :(得分:1)

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

这是一个非常简单的问题,但使用单个SQL查询无法有效解决。

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

  1. 创建临时表:

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

  3. 如果邻居属于不同的group_id,则更新登台表,将所有group_id设置为该集合中的至少一个。

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