Mysql选择将一个表的数据与两个连接表组合在一起

时间:2015-01-19 07:57:31

标签: mysql

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

id | name| f_name

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

1 |john| mike |

,第二个表名为person_phone

p_id | phone_number |

1 |32423423432 |

1 |65743543433 |

和第三个名为person_address的表

p_id | address |

1 |adress1|

1 |address2|

现在我想得到的结果是

id |name|phone_number|address

1 |john|32423423432 |address1

1 |john|65743543433 |address2

2 个答案:

答案 0 :(得分:1)

期望的结果让我觉得电话号码与地址有关,而不是与某人有关。

为了使第一个地址和第二个地址的第一个电话号码可靠地链接到第二个地址,您需要在person_phone上使用额外的外键来引用person_address的键或反之。 / p>

如果您选择person_phone来拥有外键,那么该表就像

p_id | address | a_id
1 |adress1| 1
1 |address2| 2

和person_address需要一个primairy键,它就像

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_phone上的p_id变得过时/冗余/无意义/混乱。该号码不再与某个人直接相关,而只是通过该地址间接(但并非不太可靠)。

答案 1 :(得分:0)

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