我的数据库中有以下表格
PK: BeneficiaryId
该表列出了健康保险数据库中的受益人。PK: BeneficiaryId AND PolicyId
这是受益人与保险单之间多对多关系的结果表。PK: PolicyId
此表列出了所有策略,每个策略都包含策略的开始日期和结束日期。PK: PolicyId AND BenefitId
此表是策略和福利之间多对多关系的结果表,它包含该策略的限制,每个权益的最大会话数等等。PK: BenefitId
此表列出了各种优势及其类别。我在这里尝试做的是根据TableOfBenefits
表中列出的最后一个策略,从Beneficiary
表中获取一个PolicyBeneficiary
的行。
我设法提出这个加入的子查询以获得受益人的最后一个策略,然后将其与我需要的数据一起加入,它完成了工作,但我不确定这是否是优化的解决方案我的问题。
SELECT
Benefit.BenefitId
,Benefit.Name
,TableOfBenefits.BenefitLimit
,TableOfBenefits.Percentage
,TableOfBenefits.Sessions
FROM TableOfBenefits
INNER JOIN Benefit
ON TableOfBenefits.BenefitId = Benefit.BenefitId
INNER JOIN (
SELECT Policy.PolicyId
FROM Policy
INNER JOIN PolicyBeneficiary
ON Policy.PolicyId = PolicyBeneficiary.PolicyId
WHERE PolicyBeneficiary.BeneficiaryId = 2
ORDER BY PolicyId DESC LIMIT 1
) Policy
ON TableOfBenefits.PolicyId = Policy.PolicyId
我试图找出这是否是我的问题的最佳解决方案,或者是否有另一个更优化的解决方案。
答案 0 :(得分:1)
添加了小修改删除where子句并将其添加到连接操作中,在这种情况下,它最初将过滤该结果,然后将其与其他表连接
SELECT
Benefit.BenefitId
,Benefit.Name
,TableOfBenefits.BenefitLimit
,TableOfBenefits.Percentage
,TableOfBenefits.Sessions
FROM TableOfBenefits
INNER JOIN Benefit
ON TableOfBenefits.BenefitId = Benefit.BenefitId
INNER JOIN (
SELECT Policy.PolicyId
FROM Policy
INNER JOIN PolicyBeneficiary
ON Policy.PolicyId = PolicyBeneficiary.PolicyId
AND PolicyBeneficiary.BeneficiaryId = 2
ORDER BY PolicyId DESC LIMIT 1
) Policy
ON TableOfBenefits.PolicyId = Policy.PolicyId