Sql 连接3个表的正确方法

Sql 连接3个表的正确方法,sql,join,Sql,Join,我试图从3个不同的表中提取数据,结果集并不是我所期望的 SELECT mdp.ReportDate , mdp.PolicyNumber , Company , StateCode , LOB , mdp.AccountReference , EffectiveDate , EquityDate , AccountBalance , TermPremium , DelinquentAmount , Polic

我试图从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将作为空值返回。此列包含表中的数据,我希望我的结果集包含这些数据,但事实并非如此

该空值来自左联接中使用的第二个表。Left join将返回来自左侧第一个表的所有结果,如果它在要连接的第二个表中未找到匹配项,则将第一个表与空值配对。看看你在匹配什么。

这个空值来自左连接中使用的第二个表。Left join将返回来自左侧第一个表的所有结果,如果它在要连接的第二个表中未找到匹配项,则将第一个表与空值配对。看看你在做什么。

如果你没有提供足够的信息,我们怎么知道正确的查询?向我们展示示例数据和预期输出。请阅读,这里是学习如何提高问题质量和获得更好答案的好地方。表DC_BTL_PolicyTerm中的值是否满足条件和PolicyTermEffectiveDate=从DC_BIL_PolicyTerm中选择MaxPolicyTermEffectiveDate???您了解其工作原理吗?请将所有字段,我们不知道它们来自哪个表。如果您不这样做,您的查询将无法通过此处的代码检查。如果您没有提供足够的信息,我们如何知道正确的查询?向我们展示示例数据和预期输出。请阅读,这里是学习如何提高问题质量和获得更好答案的好地方。表DC_BTL_PolicyTerm中的值是否满足条件和PolicyTermEffectiveDate=从DC_BIL_PolicyTerm中选择MaxPolicyTermEffectiveDate???您了解其工作原理吗?请将所有字段,我们不知道它们来自哪个表。如果不这样做,您的查询将无法通过此处的代码审阅。感谢您的反馈,这非常有意义。感谢您的反馈,这非常有意义。