使用 SQL 在 Access 中的 5 个表上进行内连接和左连接

Posted

技术标签:

【中文标题】使用 SQL 在 Access 中的 5 个表上进行内连接和左连接【英文标题】:Inner Join and Left Join on 5 tables in Access using SQL 【发布时间】:2020-05-26 18:50:26 【问题描述】:

我正在尝试访问下表中的数据:

    组织计划年 ProjOrgPlnYrJunction 直流 DCMaxEEContribLevel DCNonDiscretionaryContribLevel

基本上,我需要内部加入 OrgPlanYear + DC 和 ProjOrgPlnYrJunction 然后我需要左加入剩余的表(表 4 和 5),因为表 1-3 有我需要的所有行,只有一些有数据在表 4-5 中。我需要每个表中的几个变量。我还需要 WHERE 函数覆盖所有字段(这意味着我希望所有这些数据都用于 projectID=919 的选择组)。

请帮忙!

我尝试了很多错误的方法,包括尝试使用设计查询端(即 JOIN 函数问题、FROM 函数格式错误等)!这是一个排除我需要的所有变量的示例:

SELECT 
ProjOrgPlnYrJunction.fkeyProjectID, OrgPlanYear.OrgName, DC.PlanCode, DCNonDiscretionaryContribLevel.Age,DCNonDiscretionaryContribLevel.Service

FROM 
(((OrgPlanYear INNER JOIN DC ON OrgPlanYear.OrgPlanYearID = DC.fkeyOrgPlanYearID) INNER JOIN ProjOrgPlnYrJunction ON OrgPlanYear.OrgPlanYearID = ProjOrgPlnYrJunction.fkeyOrgPlanYearID) 

LEFT JOIN
(SELECT DCNonDiscretionaryContribLevel.Age AS Age, DCNonDiscretionaryContribLevel.Service AS Service FROM DCNonDiscretionaryContribLevel WHERE ProjOrgPlnYrJunction.fkeyProjectID)=919) 

LEFT JOIN (
SELECT DCMaxEEContribLevel.EEContribRoth FROM EEContribRoth WHERE ProjOrgPlnYrJunction.fkeyProjectID)=919)

ORDER BY OrgPlanYear.OrgName;

【问题讨论】:

编辑问题以将示例数据显示为文本表格。 “排除”应该是“包括”吗? @June7 我有一个我需要的 50 多个变量的列表。我只包括了一对来举例说明这个问题。所以,我的意思是排除我需要的一切,只展示一些。感谢您的编辑。 【参考方案1】:

您的查询的主要问题:

缺少每个 LEFT JOINON 子句。 在不同子查询(例如,FROM DCNonDiscretionaryContribLevel WHERE ProjOrgPlnYrJunction.fkeyProjectID)的 SELECTWHERE 中引用其他表列。 根据 Access SQL 要求,子查询和联接周围的括号不匹配。

请参阅下面调整后的 SQL,它现在使用短表别名。请务必使用适当的列调整 SELECTON 子句。

SELECT p.fkeyProjectID, o.OrgName, DC.PlanCode, dcn.Age, dcn.Service, e.EEContribRoth

FROM (((OrgPlanYear o
INNER JOIN DC 
   ON o.OrgPlanYearID = DC.fkeyOrgPlanYearID) 
INNER JOIN ProjOrgPlnYrJunction p
   ON o.OrgPlanYearID = p.fkeyOrgPlanYearID) 

LEFT JOIN
  (SELECT Age AS Age, Service AS Service 
   FROM DCNonDiscretionaryContribLevel
   WHERE fkeyProjectID = 919) AS dcn
     ON dcn.fkeyProjectID = p.fkeyOrgPlanYearID)

LEFT JOIN 
  (SELECT EEContribRoth 
   FROM EEContribRoth 
   WHERE fkeyProjectID = 919) AS e
     ON e.fkeyProjectID = p.fkeyProjectID

ORDER BY o.OrgName;

【讨论】:

以上是关于使用 SQL 在 Access 中的 5 个表上进行内连接和左连接的主要内容,如果未能解决你的问题,请参考以下文章

左内连接 5 个表

使用 SQL 向 MS Access 中的多个表添加列

使用 MS Access SQL 查询创建与现有表具有一对一关系的第二个表

在 MS Access 或 SQL Server 中查找 2 个表之间的差异

使用 Access 和 Sql 数据库构建查询

如何将 excel 索引匹配转换为 Access - 加入 4 个表