代码之家  ›  专栏  ›  技术社区  ›  Dan

访问左连接工作不正常

  •  1
  • Dan  · 技术社区  · 14 年前

    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;
    

    但是左连接行为不正确。此表中的行数少于初始。。。但它应该保留所有行的初始值,因为我使用的是左连接,对吗?我在initial中发现了几行(比如sysid=7,这是initial的键)没有进入这个表。

    3 回复  |  直到 14 年前
        1
  •  2
  •   JonH    14 年前

    这可能与你的思维和逻辑有关。在此添加一些()括号以包含所有内容,如下所示:

    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

        2
  •  1
  •   JeffO    14 年前

    如果在查询设计器中,请确保清除了所有筛选器。我已经构建了您的表和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;
    
        3
  •  0
  •   Dan    14 年前