Access Left Join无法正常工作

时间:2010-08-19 17:26:08

标签: sql ms-access

在访问中我写了这个查询:

Select
  I.sysid, I.MemberNumber, I.Date, I.Distributer,
  F.MemberNumber as FMember, F.Date as FDate, I.Distributer as FDistributer
From Initial as I
Left Join Final as F ON
  I.MemberNumber=F.MemberNumber and
  I.Distributer=F.Distributer and
  I.Date>=F.Date-14 and
  I.Date<=F.Date+14;

但左连接的行为不正确。在这个表中有更少的行然后在初始...但它应该保持所有行从初始,因为我使用左连接,对吧?我在初始发现了几行(比如sysid = 7,这是Initial的密钥),但是没有进入这个表。

3 个答案:

答案 0 :(得分:2)

它可能与您的AND逻辑有关。添加一些()括号到这包括所有这样:

Select
  I.sysid, I.MemberNumber, I.Date, I.Distributer,
  F.MemberNumber as FMember, F.Date as FDate, I.Distributer as FDistributer
From Initial as I
Left Join Final as F ON
  (I.MemberNumber=F.MemberNumber and
  I.Distributer=F.Distributer and
  (I.Date>=F.Date-14) and
  (I.Date<=F.Date+14));

另外我认为有一个dateadd function,我会使用它而不是+ / - 。

答案 1 :(得分:1)

如果您在查询设计器中,请确保清除所有过滤器。我已经构建了你的表和sql,无法重现你的错误。

SELECT I.sysid
    , I.MemberNumber
    , I.Dated
    , I.Distributer
    , F.MemberNumber
    , F.Dated AS FDated
    , F.Distributer AS FDistributer
FROM Initial AS I 
LEFT JOIN Final AS F 
ON I.Distributer = F.Distributer 
      AND I.MemberNumber = F.MemberNumber
      AND I.Dated>=F.Dated-14 
      AND I.Dated<=F.Dated+14;

答案 2 :(得分:0)

尝试向原始表添加其他字段,并使用更新查询添加额外的列。通过这种方式,您可以确保不会丢弃任何列。