嵌套SQL查询3个级别

时间:2014-12-11 19:17:17

标签: sql ms-access-2010 nested-query

我正在使用MS Access并且在编写查询时遇到麻烦以获得最终结果。也许有人可以帮忙。

我有项目,任务和子任务表。每个表都有一个相关的表格,用于" Assignees"。这意味着可以将项目分配给员工,但可以将子任务分配给不同的员工,然后可以将子任务分配给其他员工。

现在,当在屏幕上显示此内容时,我查询已分配给任何项目/任务/子任务的员工。我需要显示数据而不是其他数据。因此,例如,如果我仅查询的员工已分配给任务,则应显示该项目和任务,但不显示其他项目/任务/且没有子任务。同样,如果我查询仅分配给子任务的员工,那么我只想查看关联的项目和任务。我想我可以通过一系列查询来完成这个......我想......但是我可以使用一种灵活的方法来创建这些数据。

简单地使用一系列连接的选择查询可能会有效,但它不会因为员工只被分配到子任务而不是项目或任务。

感谢您的帮助!

更新了附加信息:

表结构:

CREATE TABLE [dbo].[Projects](
[ProjectID] [int] IDENTITY(1,1) NOT NULL,
[ProjectName] [varchar](100) NULL,
[ClientID] [int] NULL,

CREATE TABLE [dbo].[PM_ProjectAssignee](
[AssigneeID] [int] IDENTITY(1,1) NOT NULL,
[ProjectID] [int] NULL,
[EmployeeID] [int] NULL,

CREATE TABLE [dbo].[PM_ProjectTasks](
[ProjectTaskID] [int] IDENTITY(1,1) NOT NULL,
[ProjectID] [int] NULL,
[TaskID] [smallint] NULL,

CREATE TABLE [dbo].[PM_TaskAssignee](
[AssigneeID] [int] IDENTITY(1,1) NOT NULL,
[ProjectTaskID] [int] NULL,
[EmployeeID] [int] NULL,

CREATE TABLE [dbo].[PM_ProjectSubTasks](
[ProjectSubTaskID] [int] IDENTITY(1,1) NOT NULL,
[ProjectTaskID] [int] NULL,
[SubTaskDesc] [varchar](255) NULL,

CREATE TABLE [dbo].[PM_SubTaskAssignee](
[AssigneeID] [int] IDENTITY(1,1) NOT NULL,
[ProjectSubTaskID] [int] NULL,
[EmployeeID] [int] NULL,

关于我尝试的查询...很多。我正在实现一个场景,我最终得到了大约六个不同的查询,最终形成一个(一些用代码构建的查询允许过滤)但最后一个尝试的是:

SELECT  ProjectID, ProjectName, EmployeeID, ProjectTaskID, EmployeeID, Association, ProjectSubTaskID, EmployeeID
FROM (qrTest3_Project LEFT JOIN qrTest2_Task ON qrTest3_Project.ProjectID = qrTest2_Task.ProjectID) LEFT JOIN qrtest1_SubTask ON qrTest2_Task.ProjectTaskID = qrtest1_SubTask.Association
WHERE (((qrTest3_Project.EmployeeID)=8)) OR (((qrTest2_Task.EmployeeID)=8)) OR (((qrtest1_SubTask.EmployeeID)=8));

上述查询包括简单地将每个项目/任务/子任务加入其各自的受让人表的其他查询。如果需要,我也可以发布这些内容。

我希望能提供您需要的其他信息吗?如果没有,很高兴提供更多。 谢谢!

1 个答案:

答案 0 :(得分:1)

我想我可能已经弄清楚了......我有点怀疑,我觉得它需要的时候有点困难。只需简单地加入标准就可以获得我需要的数据并可以使用。

SELECT PM_ProjectAssignee.ProjectID, PM_ProjectTasks.ProjectTaskID, PM_ProjectSubTasks.ProjectSubTaskID 
FROM (((PM_ProjectAssignee
 LEFT JOIN PM_ProjectTasks
 ON PM_ProjectAssignee.ProjectID = PM_ProjectTasks.ProjectID)
 LEFT JOIN PM_ProjectSubTasks
 ON PM_ProjectTasks.ProjectTaskID = PM_ProjectSubTasks.ProjectTaskID)
 LEFT JOIN PM_TaskAssignee
 ON PM_ProjectTasks.ProjectTaskID = PM_TaskAssignee.ProjectTaskID)
 LEFT JOIN PM_SubTaskAssignee
 ON PM_ProjectSubTasks.ProjectSubTaskID = PM_SubTaskAssignee.ProjectSubTaskID 
WHERE (((PM_ProjectAssignee.EmployeeID)=14))
 OR (((PM_TaskAssignee.EmployeeID)=14))
 OR (((PM_SubTaskAssignee.EmployeeID)=14))
GROUP BY PM_ProjectAssignee.ProjectID, PM_ProjectTasks.ProjectTaskID, PM_ProjectSubTasks.ProjectSubTaskID;
相关问题