Создать таблицу для отношения n: m - PullRequest
0 голосов
/ 05 октября 2011

У меня вопрос по MySQL. У меня есть эта таблица:

ID      Name
------  ------------
1       Peter
2       John
3       Carl
4       William

Записи связаны в соответствии с этой таблицей:

Name          LinkedName
------------  --------------
Peter         Carl
Peter         William
Carl          John

т.е. - Питер связан с Карлом и Уильямом - Карл связан с Джоном

Как мне создать эту таблицу на основе этой таблицы:

* * 1010

Я попытался использовать два соединения, например

SELECT * 
  FROM PersonLinks T 
       JOIN Persons W 
          ON T.Name = W.Word 
       JOIN Persons W2 
          ON T.LinkedName = W2.Word;

но мой сервер не отвечает после такого запроса. Я действительно надеюсь, что кто-то может помочь мне здесь. Спасибо.

Ответы [ 2 ]

2 голосов
/ 05 октября 2011

Предположим, что первая таблица с идентификатором и именами называется Names, а вторая - с именами LinkedName.

Вам следует использовать следующий запрос:

SELECT N1.ID AS ID1, N2.ID AS ID2
FROM @LinkedNames LN
LEFT OUTER JOIN @Names N1 ON N1.Name = LN.Name
LEFT OUTER JOIN @Names N2 ON N2.Name = LN.LinkedName

Это проверенодать правильный результат.

0 голосов
/ 05 октября 2011

Предположим, что первая таблица с идентификатором и именами называется emp, а вторая с отношением называется ссылкой.

select emp_instance1.id,emp_instance2.id 
  from emp emp_instance1,
       emp emp_instance2,
       link link1 
 where link1.name=emp_instance1.name 
       AND link1.link=emp_instance2.name;
...