使用 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 JOIN
的 ON
子句。
在不同子查询(例如,FROM DCNonDiscretionaryContribLevel WHERE ProjOrgPlnYrJunction.fkeyProjectID
)的 SELECT
和 WHERE
中引用其他表列。
根据 Access SQL 要求,子查询和联接周围的括号不匹配。
请参阅下面调整后的 SQL,它现在使用短表别名。请务必使用适当的列调整 SELECT
和 ON
子句。
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 个表上进行内连接和左连接的主要内容,如果未能解决你的问题,请参考以下文章
使用 MS Access SQL 查询创建与现有表具有一对一关系的第二个表