MYSQL在多个表上选择查询

时间:2017-07-17 19:51:21

标签: mysql select foreign-keys database-normalization self-join

我没有看到一种干净的方式来编写这个查询而没有我选择避免的子查询,因为它们通常不可移植,并且比单个查询更难阅读和调试。

表A恰好有两个表B的外键,它们总是不同,但始终是定义的。有点像:

MARRIAGE_TABLE
M_KEY
LAST_NAME
PERSON_HUSBAND_FK
PERSON_WIFE_FK

PERSON_TABLE
PERSON_KEY
SEX 
FIRST_NAME

PERSON_HUSBAND_FK将始终指向SEX = MALE,WIFE_FK将始终指向女性。每个人总会有一个。 (这绝不是关于同性婚姻的声明BTW我都是为了它)...

我想创建一个结果:

MARRIAGE   HUSBAND     WIFE
--------   -------     ----
SMITH        TOM        KATHY
JONES        BILL       EVE

我目前的方法是从MARRIAGE TABLE获取所有记录并将它们存储在哈希中。然后我使用姓名{wife_name}和{husband_name}使用丈夫和妻子FK的另外2个查询来扩充哈希。然后我格式化并打印哈希。它有效,但我并不狂热每行3个查询。

我不确定我曾经遇到过一张表格,其中包含了> 1 FK的表格。我已经做了多年的桌面设计,但我不确定这个设计是否符合规范化。对我来说似乎没有。就像他们创造了一个没有中间表的许多人;作弊?

1 个答案:

答案 0 :(得分:2)

只需加入表PERSON_TABLE两次:

SELECT m.last_name AS marriage, p1.first_name AS husband, p2.first_name AS wife 
FROM marriage_table m
INNER JOIN person_table p1 ON p1.person_key = m.person_husband_fk
INNER JOIN person_table p2 ON p2.person_key = m.person_wife_fk