【问题标题】:Comparison of LEFT JOINS in MS AccessMS Access 中的 LEFT JOINS 比较
【发布时间】:2020-09-17 13:49:54
【问题描述】:

如果我的查询结构如下:

SELECT DISTINCT TBL1.Name, TBL2.Month, TBL3.Month
FROM (TBL1
LEFT JOIN TBL2 ON TBL1.Name = TBL2.Name)
LEFT JOIN TBL3 ON TBL1.Name = TBL3.Name

产生如下结果:

TBL1.Name|TBL2.Month|TBL3.Month
-----------------------------
Name1    |7        |8
Name1    |8        |8
Name2    |8        |8
Name3    |8        |
Name4    |         |8

第一行的结果是导致我的问题的原因。 TBL3.Month 需要为 NULL(或空白),因为 TBL2 和 TBL3 中的月份不匹配。 第四行是准确的,TBL3 中没有第 8 个月的记录,所以它准确地反映了 NULL。 同样,第五行准确地表示了第 8 个月的 TBL2 缺失数据。
表中的数据是一种简单的格式,如下所示:
TBL1

Name
----
Name1
Name2
Name3
Name4

TBL2

Name  |Month
------------
Name1 |7
Name1 |8
Name2 |8
Name3 |8

TBL3

Name  |Month
------------
Name1 |8
Name2 |8
Name3 |8
Name4 |8

所需的输出如下所示:

TBL1.Name|TBL2.Month|TBL3.Month
-----------------------------
Name1    |7        |
Name1    |8        |8
Name2    |8        |8
Name3    |8        |
Name4    |         |8

【问题讨论】:

  • 您应该提供示例数据。
  • 。 .请显示您开始使用的数据。
  • 对不起,我希望更新能画出更清晰的画面
  • 如果 Access 的限制阻止单个查询工作(即嵌套的 select 语句),我也不反对在查询中使用子查询
  • 在 MS Access 中使用准确的发布数据和查询,我无法重现第一组结果。除了第 4 行之外,我确实重现了您想要的结果。不确定为什么缺少值,因为在 TBL3 中有一个非空值 Name3。我的猜测是在TBL3 中为Name1Name2Name4 填充了数据,它再现了原始结果。请仔细检查您的数据。

标签: sql ms-access join


【解决方案1】:

如果您需要匹配月份,请将其包含在 on 子句中:

FROM (TBL1 LEFT JOIN
       TBL2
       ON TBL1.Name = TBL2.Name
     ) LEFT JOIN
     TBL3
     ON TBL1.Name = TBL3.Name AND TBL2.MONTH = TBL3.MONTH

以下可能做你想做的事:

SELECT . . . 
FROM (TBL1 LEFT JOIN
       TBL2
       ON TBL1.Name = TBL2.Name
     ) LEFT JOIN
     TBL3
     ON TBL1.Name = TBL3.Name
WHERE TBL2.MONTH = TBL3.MONTH OR
      TBL2.MONTH IS NULL OR
      TBL3.MONTH IS NULL

【讨论】:

  • 感谢您的回复。当按照您的建议(在下面提供)构建查询时,我得到“不支持 JOIN 表达式”作为弹出错误。 ` SELECT DISTINCT TBL1.[Name], Month([TBL2].[Date]), Month([TBL3].[Date]) FROM (TBL1 LEFT JOIN [TBL2] ON TBL1.[Name] = [TBL2].[中心名称]) LEFT JOIN [TBL3] ON TBL1.[Name] = [TBL3].[Center Name] AND Month([TBL2].[Date]) = Month([TBL3].[Date]) `
  • 使用最新的编辑加上 WHERE 子句的添加会切断第一行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
相关资源
最近更新 更多