我有三张桌子
table: courses
course_id | slug
-------------------
1 | math
2 | science
3 | english
table: users
user_id | username
------------------
1 | john
2 | steve
table user_courses
user_course_id | user_id | course_id
------------------------------------
1 | 1 | 1
2 | 1 | 3
3 | 2 | 3如你所见,课程数学只有一位老师(约翰),而英语课程有两位老师(约翰和史蒂夫)。
我想从表格课程中选择所有课程,并结合每门课程的教师人数。我该怎么做?
提前感谢!
发布于 2016-11-22 10:59:57
像这样吗?
SELECT Course.slug, Count(Users.user_id) as UserCount FROM Course
INNER JOIN User_Course ON User_Course.course_id = Course.course_id
INNER JOIN Users ON Users.user_id = User_Course.course_id
GROUP BY Course.course_id; 我也会更改您的user_course的逻辑,而不是使用Composit主键。
CREATE TABLE User_Course (
user_id INT NOT NULL,
course_id INT NOT NULL,
PRIMARY KEY(user_id, course_id),
CONSTRAINT user_course_user FOREIGN KEY (user_id) REFERENCES Users(user_id),
CONSTRAINT user_course_course FOREIGN KEY (course_id) REFERENCES Course(course_id)
); 这里:SQLFiddel
发布于 2016-11-22 10:54:55
实际上,你应该张贴你想要的结果,否则我们不能给你真正想要的。就像@duffymo说的,你需要两个JOIN,这里有一个解决方案(或尝试):
select
c.*,
coalesce(count(u.user_id), 0) as teacher_cnt
from courses c
left join user_courses uc
on c.course_id = uc.course_id
left join users u
on u.user_id = uc.user_id
group by c.course_idSqlFiddle演示
https://stackoverflow.com/questions/40739428
复制相似问题