0

我正在尝试将多个表连接在一起以构建报告。该报告列出了课程、对其进行的修订以及谁请求、制定和批准了修订。

根据请求,已批准,这些值是员工编号。我正在尝试将上面的内部连接表与 Employee 表连接起来,这样我就可以列出请求、制定和批准修订的人的姓名(不仅仅是员工编号)。

这就是我所拥有的,我知道这是完全错误的。

SELECT *
FROM Courses 
INNER JOIN CourseRevisions ON CourseRevisions.PELID = Courses.PELID
INNER JOIN CourseGroups ON CourseGroups.CourseGroupID = Courses.CourseGroupID
INNER JOIN [dbo].[OPG_Employees] ON OPG_Employees.EmployeeID = CourseRevisions.UpdatedBy
AND OPG_Employees.EmployeeID = CourseRevisions.ApprovedBy
AND OPG_Employees.EmployeeID = CourseRevisions.RequestedBy

这只返回一个结果,恰好为所有 3 个(请求、批准和更新)列出了相同的员工 ID

我将如何获得它,以便我可以获得每个员工的表格结果?

4

2 回答 2

1

您必须为每个字段加入 OPG_Employees 表一次,即上面示例中的 3 次。一个 INNER JOIN 用于 UpdatedBy,一个 INNER JOIN 用于 ApprovedBy,一个 INNER JOIN 用于 RequestedBy。

像这样:

SELECT *
FROM Courses 
INNER JOIN CourseRevisions ON CourseRevisions.PELID = Courses.PELID
INNER JOIN CourseGroups ON CourseGroups.CourseGroupID = Courses.CourseGroupID
INNER JOIN [dbo].[OPG_Employees] empUpdatedBy ON empUpdatedBy.EmployeeID = CourseRevisions.UpdatedBy
INNER JOIN [dbo].[OPG_Employees] empApprovedBy ON empApprovedBy.EmployeeID = CourseRevisions.ApprovedBy
INNER JOIN [dbo].[OPG_Employees] empRequestedBy ON empRequestedBy.EmployeeID = CourseRevisions.RequestedBy
于 2012-06-26T18:40:53.263 回答
1

您需要为每个被引用的员工单独加入:

SELECT *
FROM Courses INNER JOIN
     CourseRevisions
     ON CourseRevisions.PELID = Courses.PELID INNER JOIN
     CourseGroups
     ON CourseGroups.CourseGroupID = Courses.CourseGroupID INNER JOIN
     [dbo].[OPG_Employees] UpdateEmp 
     ON UpdateEmp.EmployeeID = CourseRevisions.UpdatedBy INNER JOIN
     [dbo].[OPG_Employees] ApprovedEmp
     on OPG_ApprovedEmp.EmployeeID = CourseRevisions.ApprovedBy INNER JOIN
     [dbo].[OPG_Employees] RequestedEmp
     on RequestedEmp.EmployeeID = CourseRevisions.RequestedBy

您的原始公式要求所有三个 id 完全相同。

于 2012-06-26T18:42:40.030 回答