2010-05-07 1 views
1

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

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

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

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

Благодаря

+0

Какие СУБД вы используете? – Quassnoi

ответ

1

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

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

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

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

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

  3. Если соседи принадлежат разным group_id, обновите постановку table, установив все group_id в один из наборов.

  4. Включите город с новым group_id в промежуточный стол.

+0

Здравствуйте, Спасибо за ваш быстрый ответ, хотя мне не так легко написать процедуру. Я прекрасно понимаю ваш метод, но я изо всех сил пытаюсь написать материал. Я буду очень рад, если у вас есть дополнительные советы по конкретным функциям, которые будут использоваться в этой процедуре. Еще раз спасибо – thoomasbro

Смежные вопросы