MS Access 2013 中的嵌套 SQL 联接

Posted

技术标签:

【中文标题】MS Access 2013 中的嵌套 SQL 联接【英文标题】:Nested SQL Joins in MS Access 2013 【发布时间】:2015-12-28 05:18:57 【问题描述】:

我对数据进行了规范化,并一直在尝试跨多个表显示数据。我对 SQL 还很陌生,所以请多多包涵。

我要做的是显示尚未分配给项目的任务,但包含来自各种表的数据,例如项目标题、公司等(使用 LEFT JOIN 和 WHERE 子句)。

有效的原始代码:

SELECT Tasks.ID, Projects_Tasks.ProjectID
FROM Tasks LEFT JOIN Projects_Tasks ON Projects_Tasks.TaskID = Tasks.ID
WHERE Projects_Tasks.ProjectID IS NULL;

嵌套连接代码(不起作用):

SELECT Tasks.ID, Projects.ProjectTitle, ProjectManagers.FirstName, ProjectManagers.LastName, Companies.Company
FROM ((((Tasks
LEFT JOIN Projects_Tasks ON Projects_Tasks.TaskID = Tasks.ID)
INNER JOIN Projects_Tasks ON Projects_Tasks.ID = Projects.ID)
INNER JOIN Projects ON Projects.ID = Projects_Tasks.ProjectID)
INNER JOIN ProjectManagers ON ProjectManagers.ID = Projects.ProjectManagerID)
INNER JOIN Companies ON Companies.ID = ProjectManagers.CompanyID
WHERE Projects_Tasks.ProjectID IS NULL;

我尝试了很多组合,但我就是无法让它发挥作用。我试过颠倒我的嵌套连接的顺序(以防它从下到上执行),我试过了

【问题讨论】:

我问你为什么要嵌套这些连接? 看起来你加入Projects_Tasks的表你也加入了.. 请详细说明“不起作用”。您的最后一句话似乎也缺少一些东西。 【参考方案1】:

我不喜欢编写 SQL 语句。不过,Access 的好处是它可以在查询中为您生成 SQL 语句

使用查询生成器:

选择表 Project_Tasks & Project_Managers & 所有其他表 你想显示数据 选择您要显示的所有相关数据字段 在您有“ProjectID”字段的地方,Criteria 部分需要有“Is Null”(但不要加引号)

然后,保存查询并运行它。 (您可能只使用该查询,或者删除 SQL 语句)

祝你好运!

【讨论】:

以上是关于MS Access 2013 中的嵌套 SQL 联接的主要内容,如果未能解决你的问题,请参考以下文章

SQL,嵌套查询(MS ACCESS)

MS Access 中的临时表

MS-Access 中的未嵌套行?

检查 MS Access SQL 语句中的空值

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

左连接 SQL 查询 - MS Access