2016-05-22 2 views
2

Я пытаюсь оставить три таблицы с предложением where. В первом примере запрос приводит к внутреннему соединению. Если я выберу предложение where, это приведет к левому соединению, но включает записи за пределами желаемого диапазона дат.Предложение WHERE делает LEFT JOIN работать как INNER JOIN

Я использую Microsoft Access 2010 и Visual Basic 2010.

strQry = " SELECT tblUnits.UnitNumber, TenantName, SchedRent, SchedCAM, sum(AMOUNT) as SUMAMOUNT " _ 
    & " FROM ((tblUnits LEFT JOIN tblTenants ON tblTenants.Unitptr = tblUnits.ID) " _ 
    & " LEFT JOIN tblTrans ON (tblTenants.ID = tblTrans.id) ) " _ 
    & " WHERE (tblTrans.PostDate BETWEEN #" & txtStartDate.Text & "# AND #" & txtEndDate.Text & "#) " _ 
    & " GROUP BY tblUnits.UnitNumber, TenantName, SchedRent, SchedCAM " _ 
    & " ORDER BY tblUnits.UnitNumber " 

Во втором примере он прекрасно работает, но только соединяет две таблицы

strQry = " SELECT U.UnitNumber, sum(AMOUNT) as sumamount " _ 
& " FROM tblUnits AS U " _ 
    & " LEFT JOIN " _ 
    & " (" _ 
    & " SELECT * " _ 
    & " FROM tblTrans " _ 
    & " WHERE (tblTrans.PostDate BETWEEN #" & txtStartDate.Text & "# AND #"  & txtEndDate.Text & "#) " _ 
    & ") as X " _ 
    & " ON U.ID = X.ID " _ 
    & " GROUP BY U.UnitNumber " 

Я не могу получить синтаксис исправить, когда я пытаюсь присоединиться к третьей таблице

+1

Давай список запроса. Не заставляйте нас читать = ". Это затрудняет отправку ответа. I pass. – Paparazzi

ответ

0

Попробуйте WHERE tblTrans.PostDate IS NULL OR ...

В своей основе ваш LEFT JOIN включает строки tblUnits, для которых нет соответствующей строки tblTrans. Тогда предложение WHERE устраняет эти строки.

+0

Доступ разрешает« OR », но не« AND »в предложении ON. – Larrythebruin

+0

@Larrythebruin ОК, я удалил эту альтернативу – Joe

0

следующие работы

strQry = " SELECT U.UnitNumber, T.TenantName, T.SchedRent, T.SchedCAM, sum(AMOUNT) as SUMAMOUNT " _ 
     & " FROM ((tblUnits AS U " _ 
     & " LEFT JOIN tblTenants as T ON U.ID = T.UnitPtr) " _ 
     & " LEFT JOIN " _ 
     & " (" _ 
     & " SELECT * " _ 
     & " FROM tblTrans " _ 
     & " WHERE (tblTrans.PostDate BETWEEN #" & txtStartDate.Text & "# AND #" & txtEndDate.Text & "#) " _ 
     & ") as X " _ 
     & " ON U.ID = X.ID) " _ 
     & " GROUP BY U.UnitNumber, TenantName, SchedRent, SchedCAM " _ 
     & " ORDER BY U.UnitNumber "