![](/img/trans.png)
[英]MySQL select values from Multiple Tables dependent on latest value in one
[英](Needs Optimizing) - MySQL Select from several tables with the latest value in one table
我的數據庫中有以下表格
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
我試圖找出這是否是解決我的問題的最佳解決方案,或者是否還有另一個更優化的解決方案。
添加了小的修改,刪除了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.