我的数据库中有以下表格: 员工表,由姓名,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
答案 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'放在第一位,因为这是肯定会有列的表,并且它会连接到其他两个。
修改:修复连接。