我将三个数据库表(MySQL)简化为以下信息:
===============
member
---------------
id
FirstName
===============
member.id = quote_details.member_id
===============
quote_details
---------------
member_id
insurer_id
===============
quote_details.insurer_id = insurer.id
===============
insurer
---------------
id
Name
===============
我想要输出的是member.FirstName
和insurer.Name
,所以我理解我将需要所有表之间的连接 - 即成员> quote_details然后quote_details>保险公司。我正在努力尝试连接类型,并希望有人能指出我正确的方向。
提前感谢您的回复。
此致
尼尔
编辑澄清:
我已尝试过三个INNER JOIN
,但会返回所有保险公司的列表,其中包含被查询成员的FirstName:
==========================
FirstName | Insurer
--------------------------
Test | Insurer One
Test | Insurer Two
Test | Insurer Three
==========================
因为我只要求分配给会员报价的实际保险公司。我希望这有助于澄清一些事情。
编辑以添加样本数据:
===================
member
-------------------
id | FirstName
- - - - - - - - - -
1 | Test
2 | John
3 | Jane
===================
=======================
quote_details
-----------------------
member_id | insurer_id
- - - - - - - - - - - -
1 | 1
=======================
===================
insurer
-------------------
id | Name
- - - - - - - - - -
1 | Insurer One
2 | Insurer Two
3 | Insurer Three
===================
这有望提供现在所有的清晰度:¬)
答案 0 :(得分:0)
基本上,如果表INNER JOIN
中的两列都是不可为空的列,quote_details
就足以满足您的需求。
SELECT b.FirstName MemberName,
c.Name InsurerName
FROM quote_details a
INNER JOIN member b
ON a.member_ID = b.id
INNER JOIN insurer c
ON a.insurer_ID = c.ID
要进一步了解联接,请访问以下链接:
答案 1 :(得分:0)
您的数据设置为允许会员拥有多家保险公司(反之亦然)。如果您希望所有保险公司都在同一行,您需要进行汇总:
select m.FirstName, group_concat(i.Name separator ', ') as Insurers
from member m inner join
quote_details qd
ON qd.member_ID = m.id inner join
insurer i
ON qd.insurer_ID = i.ID
group by m.FirstName
在给表别名时,使用合理的缩写而不是“a”,“b”,“c”等。合理的缩写使查询更容易理解。
如果您的会员没有保险公司,他们将不会出现在输出中。如果您想要所有这些内容,请使用left outer join
:
select m.FirstName, group_concat(i.Name separator ', ') as Insurers
from member m left outer join
quote_details qd
ON qd.member_ID = m.id left outer join
insurer i
ON qd.insurer_ID = i.ID
group by m.FirstName
如果你想要它们在不同的行上:
select m.FirstName, i.Name
from quote_details qd inner join
member m
ON qd.member_ID = m.id inner join
insurer i
ON qd.insurer_ID = i.ID