之所以提出这个问题,是因为有一个关于教授、系、类(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/