найти отношения в структуре многие-ко-многим с помощью sql

мой вопрос близок к проблеме родитель-потомок, и мне может потребоваться рекурсивный запрос, но я не нашел ответов на форумах. вот моя проблема: у меня есть 3 таблицы:

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

Я хотел бы выделить группы мест и людей, которые связаны между собой. Например, если
Джон посещает Лондон и Париж,
Мэри посещает Париж и Нью-Йорк,
Питер посещает Бангалор и Токио,
Я хотел бы применить тот же групповой код для Мэри, Джона, Парижа. , Лондон и Нью-Йорк, и еще один код группы для Питера, Токио и Бангалора.

Я действительно не знаю, как это сделать с помощью sql. Любая идея?

Спасибо


person thoomasbro    schedule 07.05.2010    source источник


Ответы (1)


Это проблема «поиска изолированных подграфов».

Это довольно простая проблема, но ее нельзя эффективно решить одним SQL запросом.

Написать простую хранимую процедуру довольно просто:

  1. Создайте промежуточную таблицу:

    group_id   city_id
    
  2. Для каждого города найдите group_id всех его соседей (все другие города, которые посещали посетители города).

  3. Если соседи принадлежат разным group_id, обновите промежуточную таблицу, установив для всех group_id наименьшее значение из набора.

  4. Вставьте город с новым group_id в промежуточную таблицу.

person Quassnoi    schedule 07.05.2010
comment
Здравствуйте, спасибо за быстрый ответ, хотя мне не так-то просто написать процедуру. Я прекрасно понимаю ваш метод, но я изо всех сил пытаюсь написать материал. Я буду очень рад, если у вас есть дополнительные советы по конкретным функциям, которые можно использовать в этой процедуре. Еще раз спасибо - person thoomasbro; 07.05.2010