I have two tables that references each other via id. I want to connect a given name in the first table, to a relation with one or many persons using a second table. See example
Person
| 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
| related_from_id | related_to_id | Relation |
|---|---|---|
| 1 | 2 | "Sibling" |
| 1 | 5 | "Sibling" |
| 3 | 4 | "Parent" |
Given a name, how can I make a mysql query that gives me any potential siblings name and adress.
For instance I query with param "Jonas" and expect the result set to be
Relation
| Name | Related to | Adress |
|---|---|---|
| Jonas | "Thomas" | "New Banksy Home 14 5432" |
| "Sandra" | "Mcmurdo Station" |
CodePudding user response:
I would assume you want to walk the related table in any direction (left-right or right-left).
You can do:
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'
CodePudding user response:
In order to have your result
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' ;
Howover if the relation is in any direction, @The Impater's answer has you covered.
