mysql select with joins and conditions语句

vnjpjtjt  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(330)

我有三张table

TABLE `courses` (
  id                int         NOT NULL UNIQUE AUTO_INCREMENT,
  title             varchar(50) NOT NULL UNIQUE,
  duration          int         NOT NULL,
  theme             varchar(50) NOT NULL,
  students_quantity int         NOT NULL,
  PRIMARY KEY (id)
);
TABLE `users` (
  id       int         NOT NULL UNIQUE AUTO_INCREMENT,
  name     varchar(50) NOT NULL,
  email    varchar(50) NOT NULL UNIQUE,
  password varchar(50) NOT NULL,
  status   varchar(20) NOT NULL,
  role_id  int         NOT NULL,
  PRIMARY KEY (id),
  FOREIGN KEY (role_id) REFERENCES `roles` (id)
);
TABLE `teachers_courses` (
  teacher_id int NOT NULL,
  course_id  int NOT NULL,
  PRIMARY KEY (teacher_id, course_id),
  FOREIGN KEY (teacher_id) REFERENCES `users` (id),
  FOREIGN KEY (course_id) REFERENCES `courses` (id)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);

我怎样才能拿到课程呢 users.name AS teacher 如果我没有 course_id 以及 teacher_id 为了这门课 teachers_courses 我一个也不进去 teacher ?

nwsw7zdq

nwsw7zdq1#

使用 JOIN 按主键-外键路径组合数据。功能 coalesce() 如果第一个参数的计算结果为 NULL .

select c.*, coalesce(u.name, 'none') as teacher
from courses c
left join teachers_courses tc on c.id = tc.course_id
left join users u on tc.teacher_id = u.id
order by c.id

因为每门课可以有多个老师,所以 'none' 如果一门课没有老师(甚至连一个都没有)的话,教师的价值观就是这样。如果有一个以上的教师,那么输出中的行数将与每门课程的教师数相同,因此我将其包括在内 ORDER BY 正确排序结果。
如果您只需要查看一个课程的数据,请包含如下where条件:

-- ... Above SQL here ...
WHERE c.id = ?

相关问题