Связать строки в таблице MySQL - PullRequest
2 голосов
/ 05 октября 2011

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

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

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

Должен ли я создать новую таблицу следующим образом:

ID1     ID2
------  ------------
1       3
1       4
3       2

Или я должен расширить первую таблицу следующим образом:

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

Как в обоих случаях сделать запрос, который возвращает:

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

Я решил использовать JOIN, UNION и подзапросы, но я не могу его получитьработать.Я действительно надеюсь, что кто-то может помочь мне здесь.

Спасибо.

Ответы [ 2 ]

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

Поскольку это отношение n: m («Питер связан с Карлом и Уильямом»), ваша первая идея правильная: дополнительная таблица с двумя идентификаторами.Вы можете добавить дополнительную информацию об отношениях там.Также добавьте внешние ключи и первичный ключ, чтобы предотвратить повторяющиеся записи.

CREATE TABLE rel (
    from_id integer references person(id),
    to_id integer references person(id),
    primary key(from_id, to_id)
);

Запрос такой:

SELECT p1.name, p2.name AS linked_name
  FROM person p1
  JOIN rel r ON (r.from_id = p1.id)
  JOIN person p2 ON (r.to_id = p2.id)
 WHERE p1.name = 'Peter';
0 голосов
/ 05 октября 2011

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

Выберите t1.name, t3.name в качестве связанного имени из t1 left join table_ref t2 on t1.id = t2.id1 left joint1 как t3 на t3.id = t2.id2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...