链接 MySQL 表中的行
我有一个关于 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
由于它是 n:m 关系(“Peter 与 Carl 和 William 有关系”),因此您的第一个想法是正确的:一个具有两个 ID 的附加表。您可以在那里添加有关关系的更多信息。还要添加外键和主键以防止重复条目。
像这样查询:
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.
Query like this:
按照 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