簡體   English   中英

(需要優化)-MySQL從多個表中選擇一個表中的最新值

[英](Needs Optimizing) - MySQL Select from several tables with the latest value in one table

我的數據庫中有以下表格

  • 受益人。 PK: BeneficiaryId此表列出了健康保險數據庫中的受益人。
  • 政策受益人。 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

我試圖找出這是否是解決我的問題的最佳解決方案,或者是否還有另一個更優化的解決方案。

添加了小的修改,刪除了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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM