2017-01-23 3 views
0

Я пытаюсь извлечь данные из трех разных таблиц, и мой результирующий набор не является тем, что я ожидаю.Правильный способ подключения к 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 возвращается в нулевое значение. Этот столбец содержит данные в таблице, и я ожидаю, что мой результирующий набор будет содержать эти данные, но это не так.

+0

Как узнать правильный запрос, если вы не предоставили достаточную информацию? Покажите нам пример данных и ожидаемый результат. \t Пожалуйста, прочитайте [** How-to-Ask **] (http://stackoverflow.com/help/how-to-ask) \t \t И вот отличное место для [** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/), чтобы узнать, как улучшить качество вопроса и получить лучшие ответы. –

+0

делает ваше значение в таблице DC_BTL_PolicyTerm удовлетворяет условию "и PolicyTermEffectiveDate = (SELECT Max (PolicyTermEffectiveDate) FROM DC_BIL_PolicyTerm)" ??? –

+0

Вы понимаете, как работает ['LEFT JOIN'] (https://www.tutorialspoint.com/sql/sql-left-joins.htm)? –

ответ

2

Это нулевое значение из второй таблицы, используемой в вашем левом объединении. Левое соединение вернет все результаты из 1-й таблицы (слева), и если она не найдет совпадение в вашей второй таблице, чтобы присоединиться к ней, она будет сопрягать первую таблицу с нулевым значением. Посмотрите, на что вы столкнулись.

+0

спасибо за отзыв, это имеет смысл. – Jason