【问题标题】:Joining date fields from 2 separate tables in Access 2010. Outer join is acting like an inner join在 Access 2010 中连接来自 2 个单独表的日期字段。外部联接的作用类似于内部联接
【发布时间】:2025-11-28 05:10:01
【问题描述】:

块引用

我正在从 Access 2010 中的 2 个单独的表中加入日期字段。在“加入属性”中,我将包含左侧表中的所有记录,并且仅包含与右侧表匹配的记录。出于某种原因,它将其视为常规连接,其中仅出现两个表中匹配的记录。示例:左表在 2015 年 5 月 - 5 月 1 日 - 2015 年 5 月 31 日的每一天都有 31 条记录。右表只有 19 条记录,日期在 5 月加上我想在匹配时查看的其他字段。当我运行查询时,它只返回 19 条记录,而不是我期望的 31 条记录。我已经确认这两个表都是针对日期格式化的,甚至尝试使用“Clng”更改数据类型以确认记录匹配。我正在使用查询的“设计”视图 - 我对 Sql 或 Vba 一点也不擅长。我搜索过的所有网站都使用 SQL 引用了这个问题..

下面的 SQL 供那些可以使用它的人使用:

SELECT 
    [Raven Download 10 table].Region
    , [Raven Download 10 table].Market
    , [Raven Download 10 table].Location
    , [Date table].dDate
    , [Raven Download 10 table].SessEndDate
    , [Raven Download 10 table].MaxOfDwnldStat
FROM 
    [Raven Download 10 table] 
RIGHT JOIN 
    [Date table] 
ON 
    [Raven Download 10 table].SessEndDate = [Date table].dDate
WHERE 
    ((([Raven Download 10 table].Location)="hay river"));

【问题讨论】:

  • 设为LEFT JOIN?左连接将至少保留“左”表中的所有记录。但是,如果您的匹配项在您要加入的表中多次出现,您最终可能会得到更多记录。
  • 你有一个 where 条件:WHERE ((([Raven Download 10 table].Location)="hay river"));这将过滤您的预期记录

标签: ms-access


【解决方案1】:

您不能以您的方式在“外部联接”表上指定条件。然后,您基本上是在再次强制它进入内部连接。不如试试这个。

SELECT 
      RavenHay.Region
    , RavenHay.Market
    , RavenHay.Location
    , [Date table].dDate
    , RavenHay.SessEndDate
    , RavenHay.MaxOfDwnldStat
FROM 
    [Date table] 
LEFT JOIN
    (
    select 
        [Raven Download 10 table].Region
        , [Raven Download 10 table].Market
        , [Raven Download 10 table].Location
        , [Raven Download 10 table].SessEndDate
        , [Raven Download 10 table].MaxOfDwnldStat
    from 
        [Raven Download 10 table]  
    where
        [Raven Download 10 table].Location="hay river" 
    ) AS RavenHay
ON 
    [Date table].dDate = RavenHay.SessEndDate 

更新:

如果您不习惯使用 SQL,则使用 [Raven 下载 10 表] 创建一个访问查询及其关联查询,即受 hayriver 限制,然后对该查询进行右连接。

【讨论】:

  • 我刚刚从 Anthony 复制并粘贴了 SQL,它运行良好,谢谢。
  • 太棒了。喜欢这样的星期五。周末的好开始:)