Mysql 针对不同教授和课程的SQL查询

Mysql 针对不同教授和课程的SQL查询,mysql,sql,schema,Mysql,Sql,Schema,这个问题是因为有一个关于教授、系、课程和时间表的数据库。需要编写一个查询,返回所有教授及其各自课程的名称。每行必须包含教授的姓名,后跟教授教授教授的课程名称。就行而言,不能有重复项 就表名和字段而言,我拥有的模式: PROFESSOR: ID, NAME, DEPARTMENT_ID, SALARY DEPARTMENT: ID, NAME COURSE: ID, NAME, DEPARTMENT_ID, CREDITS SCHEDULE: PROFESSOR_ID, COURSE_ID, SE

这个问题是因为有一个关于教授、系、课程和时间表的数据库。需要编写一个查询,返回所有教授及其各自课程的名称。每行必须包含教授的姓名,后跟教授教授教授的课程名称。就行而言,不能有重复项

就表名和字段而言,我拥有的模式:

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

我得到的结果是所有教授的名单,但没有多门课程,只有一门。这里怎么了?它还提到PROFESSOR.ID与COURSE.PROFESSOR\u ID无关,因此
p.ID=s.PROFESSOR\u ID
是有效的

似乎您需要
左连接
而不是
内部连接
。我认为您不需要使用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
但是如果你只想要教授和课程信息,假设有些教授还没有时间表。 所以还没有
课程
信息

select distinct p.Name, c.Name
from Professor s
left join Course c on c.professor_id = p.id

我会在这里使用左连接,只涉及教授和课程表

SELECT
    p.NAME,
    COALESCE(c.COURSE_ID, 'no courses available') AS COURSE_ID
FROM PROFESSOR p
LEFT JOIN COURSE c
    ON p.ID = c.PROFESSOR_ID
ORDER BY
    p.NAME;

如果某位教授没有相关课程,我们可以通过“左加入”选项显示一条消息。

我认为下面的代码可以满足您的要求

SELECT distinct p.name,c.name
from Professor p 
inner join Schedule s on p.id=s.professor_id
inner join course c on c.id=s.course_id;