链接MySQL表中的行

时间:2011-10-05 05:35:03

标签: mysql sql database join one-to-many

我对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 个答案:

答案 0 :(得分:4)

由于这是一种关系(“彼得与卡尔和威廉有关”),你的第一个想法是正确的:一个带有两个ID的附加表。您可以添加有关该关系的更多信息。还要添加外键和主键以防止重复输入。

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';

答案 1 :(得分:0)

按照yiu的建议添加一个新表。 然后你可以通过加入id表再选择主表,如:

选择t1.name,t3.name作为linkedname 从t1 在t1.id = t2.id1上左连接table_ref t2 在t3.id = t2.id2

上将t1连接为t3