链接 MySQL 表中的行

发布于 2024-12-08 00:46:36 字数 724 浏览 0 评论 0原文

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

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

我需要链接记录。 IE - 彼得与卡尔和威廉有亲戚关系 - Carl 与 John 有关

我应该像这样创建一个新表:

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

谢谢。

I have a question about MySQL. I have this table structure:

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

I need to link the record.
I.e.
- Peter is related to Carl and William
- Carl is related to John

Should I make a new table like this:

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

Or should I extend the first table like this:

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

In both cases, how do I make a query that returns:

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

I have considered to use JOIN, UNION and sub-queries, but I can not really get it to work.
I really hope that somebody can help me here.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心碎无痕… 2024-12-15 00:46:36

由于它是 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';

As it is an n:m relationship ("Peter is related to Carl and William"), your first idea is the right one: an additional table with two IDs. You could add further information about the relationship there. Also add foreign keys and a primary key to prevent duplicate entries.

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

Query like this:

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';
尐籹人 2024-12-15 00:46:36

按照 yiu 的建议添加一个新表。
然后,您可以通过加入 id 表和主表来选择它们,如下所示:

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

Add a new table as yiu suggested.
Then you can select them by join the id table and then the main table again like:

Select t1.name, t3.name as linkedname
from t1
left join table_ref t2 on t1.id = t2.id1
left join t1 as t3 on t3.id = t2.id2

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文