首页 > 解决方案 > 使用 SQL 在 Access 中的 5 个表上进行内连接和左连接

问题描述

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

  1. 组织计划年
  2. ProjOrgPlnYrJunction
  3. 直流
  4. DCMaxEEContribLevel
  5. 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;

标签: sqlms-access

解决方案


您的查询的主要问题:

  • 每个. ON_LEFT JOIN
  • SELECT引用不同子查询中的其他表列WHERE(例如,FROM DCNonDiscretionaryContribLevel WHERE ProjOrgPlnYrJunction.fkeyProjectID)。
  • 每个 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;

推荐阅读