(需要优化) - MySQL从一个表中选择具有最新值的多个表

时间:2016-07-01 15:55:33

标签: mysql sql

我的数据库中有以下表格

  • 受益人。 PK: BeneficiaryId 该表列出了健康保险数据库中的受益人。
  • PolicyBeneficiary。 PK: BeneficiaryId AND PolicyId这是受益人与保险单之间多对多关系的结果表。
  • 策略。 PK: PolicyId此表列出了所有策略,每个策略都包含策略的开始日期和结束日期。
  • TableOfBenefits。 PK: PolicyId AND BenefitId此表是策略和福利之间多对多关系的结果表,它包含该策略的限制,每个权益的最大会话数等等。
  • 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

我试图找出这是否是我的问题的最佳解决方案,或者是否有另一个更优化的解决方案。

1 个答案:

答案 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