mysql 从桥接 table 将 table 连接到自身
mysql join a table to itself from a bridging table
我有两个 table 通过 id 相互引用。我想使用第二个 table 将第一个 table 中的给定名称连接到与一个或多个人的关系。参见示例
人
id
name
Adress
1
Jonas
Sturmwind Street 12 5431
2
Thomas
New Banksy Home 14 5432
3
Therese
Redcarpet Willow 1 6623
4
Nicko
Redcarpet Willow 1 6623
5
Sandra
Mcmurdo Station
相关
related_from_id
related_to_id
Relation
1
2
"Sibling"
1
5
"Sibling"
3
4
"Parent"
给定一个名字,我如何进行 mysql 查询以提供任何可能的兄弟姐妹的姓名和地址。
例如,我使用参数“Jonas”进行查询并期望结果集为
关系
Name
Related to
Adress
Jonas
"Thomas"
"New Banksy Home 14 5432"
"Sandra"
"Mcmurdo Station"
我假设您想沿 related
table 任意方向行走(left-right 或 right-left)。
你可以这样做:
select p.name, o.name as related_to, o.address
from person p
join related r on p.id in (r.related_from_id, r.related_to_id)
join person o on r.related_from_id = p.id and o.id = related_to_id
or r.related_to_id = p.id and o.id = related_from_id
where p.name = 'Jonas'
为了得到你的结果
SELECT p.name AS NAME, p1.name AS relatedTo, p1.Address FROM Person p, Related r, Person p1 WHERE r.related_from_id = p.id AND r.related_to_id = p1.id AND p.name = 'Jonas' ;
然而,如果关系是任何方向的,@The Impater 的回答已经涵盖了。
我有两个 table 通过 id 相互引用。我想使用第二个 table 将第一个 table 中的给定名称连接到与一个或多个人的关系。参见示例
人
id | name | Adress |
---|---|---|
1 | Jonas | Sturmwind Street 12 5431 |
2 | Thomas | New Banksy Home 14 5432 |
3 | Therese | Redcarpet Willow 1 6623 |
4 | Nicko | Redcarpet Willow 1 6623 |
5 | Sandra | Mcmurdo Station |
相关
related_from_id | related_to_id | Relation |
---|---|---|
1 | 2 | "Sibling" |
1 | 5 | "Sibling" |
3 | 4 | "Parent" |
给定一个名字,我如何进行 mysql 查询以提供任何可能的兄弟姐妹的姓名和地址。
例如,我使用参数“Jonas”进行查询并期望结果集为
关系
Name | Related to | Adress |
---|---|---|
Jonas | "Thomas" | "New Banksy Home 14 5432" |
"Sandra" | "Mcmurdo Station" |
我假设您想沿 related
table 任意方向行走(left-right 或 right-left)。
你可以这样做:
select p.name, o.name as related_to, o.address
from person p
join related r on p.id in (r.related_from_id, r.related_to_id)
join person o on r.related_from_id = p.id and o.id = related_to_id
or r.related_to_id = p.id and o.id = related_from_id
where p.name = 'Jonas'
为了得到你的结果
SELECT p.name AS NAME, p1.name AS relatedTo, p1.Address FROM Person p, Related r, Person p1 WHERE r.related_from_id = p.id AND r.related_to_id = p1.id AND p.name = 'Jonas' ;
然而,如果关系是任何方向的,@The Impater 的回答已经涵盖了。