Mysql选择将一个表的数据与两个联接表的数据合并

Mysql选择将一个表的数据与两个联接表的数据合并,mysql,Mysql,我有以下表格: 第一个主表命名为person id | name | f|u name -------------- 1 |约翰|迈克| 第二个表名为person\u phone p|u id|电话号码| 1 | 3242432 | 1 | 65743543433 | 第三个表名为person\u address p|u id|地址 1 |地址1 | 1 |地址2 | 现在我想得到的结果是 id |姓名|电话|地址 1 |约翰| 3242432 |地址1 1 | john | 657435434

我有以下表格: 第一个主表命名为
person

id | name | f|u name

--------------

1 |约翰|迈克|

第二个表名为
person\u phone

p|u id|电话号码|

1 | 3242432 |

1 | 65743543433 |

第三个表名为
person\u address

p|u id|地址

1 |地址1 |

1 |地址2 |

现在我想得到的结果是

id |姓名|电话|地址

1 |约翰| 3242432 |地址1


1 | john | 65743543433 | address2

期望的结果给我的印象是电话号码与地址相关,而不是与人相关

select p.id, p.name, ph.phone_number, pa.address   
from person p
left join person_phone ph on ph.p_id = p.id
left join person_address pa on pa.p_id = p.id
为了将第一个电话号码可靠地链接到第一个地址,并将第二个电话号码可靠地链接到第二个地址,您需要在任何一个person_电话上使用一个额外的外键来引用key to person_地址,或者相反

如果您选择person_phone来拥有外键,那么该表将如下所示

p_id | address | a_id
1 |adress1| 1
1 |address2| 2
id | p_id | address |
1 | 1 |adress1|
2 | 1 |address2|
而person_地址需要一个主键

p_id | address | a_id
1 |adress1| 1
1 |address2| 2
id | p_id | address |
1 | 1 |adress1|
2 | 1 |address2|
您的查询将如下所示

select p.id, p.name, ph.phone_number, pa.address   
left join person_address pa on pa.p_id = p.id
left join person_phone ph on ph.a_id = pa.id
还请注意,person_电话上的p_id变得过时/多余/无意义/混乱。pone号码将不再与某人直接相关,而是通过地址间接(但不太可靠)关联