SQL查询:如何让所有员工获得他们的信息和所有课程名称,并显示员工已经学过的课程

时间:2011-10-17 08:22:24

标签: sql sql-server

我的数据库中有以下表格: 员工表,由姓名,ID,组织组成 课程表,由CourseName,CourseId

组成

每个员工都可以参加很多课程,所以我们有多对多的关系。为此,我将创建另一个 employee_course 表,其中包含employee_id和course_id

我现在的问题是: 如何让所有员工获得他们的信息和所有课程名称,并展示员工所接受的课程?

结果应该给我以下内容:例如,如果员工A参加了#1和#2课程,那么在SQL Server Management Studio中,我应该得到:

员工A ................................课程#1

员工A ................................课程#2

我的查询:


SELECT     dbo.employee.Name, dbo.employee.BadgeNo, dbo.employee.Division, dbo.employee.Organization, dbo.courses.CourseName, 
                      dbo.employee_courses.courseId AS Expr1
FROM         dbo.courses LEFT OUTER JOIN
                      dbo.employee_courses ON dbo.courses.CourseID = dbo.employee_courses.courseId RIGHT OUTER JOIN
                      dbo.employee ON dbo.employee_courses.employeeId = dbo.employee.BadgeNo

2 个答案:

答案 0 :(得分:2)

SELECT e.EmployeeName, c.CourseName
FROM employee e
LEFT JOIN employee_courses ec on ec.EmployeeID = e.BadgeNo
LEFT JOIN courses c on c.courseId = ec.courseId

我的列名是正确的,但我先检查它们 - 无论原则是什么。

如果您想要更具体的回复,我建议您发布一些代表数据库关键元素的DDL,以及一些代表性测试数据的INSERT。

答案 1 :(得分:1)

尝试以这种形式进行查询:

SELECT
  *
FROM
  employee
LEFT JOIN employee_courses ON (
  dbo.employee_courses.employeeId = dbo.employee.BadgeNo
)
INNER JOIN courses ON (
  dbo.courses.CourseID = dbo.employee_courses.courseId
)

我首先把'employee'放在第一位,因为这是肯定会有列的表,并且它会连接到其他两个。

修改:修复连接。