【问题标题】:Link rows in a MySQL table链接 MySQL 表中的行
【发布时间】:2011-10-05 05:35:03
【问题描述】:

我有一个关于 MySQL 的问题。我有这个表结构:

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

我需要链接记录。 IE。 - 彼得与卡尔和威廉有关 - 卡尔与约翰有关

我应该做一个这样的新表吗:

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 和子查询,但我无法真正让它发挥作用。 我真的希望有人可以在这里帮助我。

谢谢。

【问题讨论】:

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


【解决方案1】:

由于它是 n:m 关系(“Peter 与 Carl 和 William 有关”),您的第一个想法是正确的:一个带有两个 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';

【讨论】:

  • 谢谢。那么我该如何进行查询呢?
【解决方案2】:

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

选择 t1.name, t3.name 作为linkedname 从 t1 left join table_ref t2 on t1.id = t2.id1 left join t1 as t3 on t3.id = t2.id2

【讨论】:

    猜你喜欢
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 2013-03-09
    相关资源
    最近更新 更多