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

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

  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;

【问题讨论】:

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

标签: sql ms-access


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多