之所以提出这个问题,是因为有一个关于教授、系、类(class)和时间表的数据库。需要编写一个查询,返回所有教授的姓名及其各自的类(class)。每行必须包含教授的姓名,后跟教授教授的类(class)名称。行方面不能有重复项。

我拥有的架构,就表名和字段而言:

PROFESSOR: ID, NAME, DEPARTMENT_ID, SALARY
DEPARTMENT: ID, NAME
COURSE: ID, NAME, DEPARTMENT_ID, CREDITS
SCHEDULE: PROFESSOR_ID, COURSE_ID, SEMESTER, YEAR

我现在拥有的代码:
SELECT DISTINCT p.Name AND c.NAME
FROM Prodessor p, Course c, Schedule S

WHERE
    p.DEPARTMENT_ID = c.DEPARTMENT_ID
    AND
    p.ID = s.PROFESSOR_ID
    AND
    c.ID = c.COURSE_ID

我得到的结果是所有教授的列表,但没有多门类(class),只有一门类(class)。这里出了什么问题?它还提到 PROFESSOR.ID 与 COURSE.PROFESSOR_ID 无关,因此 p.ID = s.PROFESSOR_ID 是有效的

最佳答案

似乎你需要 left join 而不是 inner join 。我认为你不需要 distinct() 这类信息

select distinct p.Name, c.Name, s.*
from schedules s
left join Professor p on p.id = s.professor_id
inner join Department d on d.department_id = p.department_id
left join Course c on c.professor_id = p.id

但如果你只想要教授和类(class)信息,假设有一些教授还没有时间表。
所以还没有 course 信息。
select distinct p.Name, c.Name
from Professor s
left join Course c on c.professor_id = p.id

关于mysql - 不同教授和类(class)的 SQL 查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58514309/

10-16 08:39