2016-05-22 11 views
2

私はwhere句で3つのテーブルを結合しようとしています。最初の例の では、クエリは内部結合になります。 where句を取り出すと、左結合が行われますが、目的の日付範囲外のレコードが含まれます。WHERE節はLEFT JOINをINNER JOINのように動作させます

私はそれが完璧に動作しますが、2つのだけのテーブル

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 " 

に参加し、私は構文を取得することはできません2番目の例での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 " 

を使用してい

第3のテーブルに参加しようとすると正しくなる

+1

は、リスト上のクエリを、是非。 – Paparazzi

答えて

0

Try WHERE tblTrans.PostDate IS NULL OR ...

LEFT JOINには、一致するtblTrans行がないtblUnits行が含まれています。 WHERE句を使用すると、これらの行が削除されます。

+0

アクセスではON句に "OR"はありますが、 "AND"にはできません。 – Larrythebruin

+0

@Larrythebruin OK、私はその代替案を削除しました。 – 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 "