我对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和子查询,但我无法真正开始工作。 我真的希望有人能在这里帮助我。
感谢。
答案 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