【问题标题】:SQL Query: How to get all employees with their information and all courses names with showing the courses that the employee has taken themSQL 查询:如何通过显示员工参加的课程来获取所有员工的信息和所有课程名称
【发布时间】:2011-12-09 02:49:27
【问题描述】:

我的数据库中有以下表格: Employee Table,由 Name、Id、Organization 组成 Course Table,由 CourseName、CourseId 组成

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

我现在的问题是: 如何获取所有员工的信息和所有课程名称并显示员工所学的课程?

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

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

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

我的查询:

选择 dbo.employee.Name,dbo.employee.BadgeNo,dbo.employee.Division,dbo.employee.Organization,dbo.courses.CourseName, dbo.employee_courses.courseId AS Expr1 FROM dbo.courses 左外连接 dbo.employee_courses ON dbo.courses.CourseID = dbo.employee_courses.courseId 右外连接 dbo.employee ON dbo.employee_courses.employeeId = dbo.employee.BadgeNo

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:
    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。

    【讨论】:

      【解决方案2】:

      尝试以这种形式查询:

      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
      )
      

      我将“员工”放在首位,因为这是肯定会有列的表,并且它左连接到其他两个。

      编辑:固定连接。

      【讨论】:

      • 我试过了,但是我得到了以下错误:Msg 4104, Level 16, State 1, Line 5 The multi-part identifier "dbo.courses.CourseID" could not be bound.
      • 糟糕,我的连接方式错误 - 试试看?另外,根据 CJM 的回答,我不知道模式“dbo”是否是必要的。如果它仍然不起作用,请尝试将其取出 - IMO 只有多模式查询才需要。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-02
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多