正确的方式加入3个表

时间:2017-01-23 16:22:43

标签: sql join

我试图从3个不同的表中提取数据,而我的结果集并不是我所期待的。

SELECT mdp.ReportDate
    , mdp.PolicyNumber
    , Company
    , StateCode
    , LOB
    , mdp.AccountReference
    , EffectiveDate
    , EquityDate
    , AccountBalance
    , TermPremium
    , DelinquentAmount
    , PolicyStatus
    , dcbpt.PolicyTermExtendedData
    , TermsInDays
    , dcba.AccountId
FROM Bil_MonthlyDelinquentPayments mdp
    INNER JOIN DC_BIL_Account AS dcba
        ON PolicyNumber = dcba.AccountReference
            AND ReportDate = (
                SELECT Max(ReportDate)
                FROM Bil_MonthlyDelinquentPayments maxmdp
                WHERE Year(maxmdp.ReportDate) = 2017
                    AND Month(maxmdp.ReportDate) = 01
                )
    LEFT JOIN DC_BIL_PolicyTerm AS dcbpt
        ON dcba.AccountId = dcbpt.PrimaryAccountId
            AND PolicyTermEffectiveDate = (
                SELECT Max(PolicyTermEffectiveDate)
                FROM DC_BIL_PolicyTerm
                )
ORDER BY AccountId

在我的结果集中,dcbpt.PolicyTermExtendedData列作为空值返回。此列包含表中的数据,我希望我的结果集包含该数据,但它没有。

1 个答案:

答案 0 :(得分:2)

该空值来自左连接中使用的第二个表。左连接将返回第一个表(左侧)中的所有结果,如果它没有在第二个表中找到要匹配的匹配项,则它将使第一个表与空值配对。看看你的产品匹配。