首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择所有课程+教师人数

选择所有课程+教师人数
EN

Stack Overflow用户
提问于 2016-11-22 10:29:14
回答 2查看 45关注 0票数 0

我有三张桌子

代码语言:javascript
复制
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

如你所见,课程数学只有一位老师(约翰),而英语课程有两位老师(约翰和史蒂夫)。

我想从表格课程中选择所有课程,并结合每门课程的教师人数。我该怎么做?

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-22 10:59:57

像这样吗?

代码语言:javascript
复制
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主键。

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2016-11-22 10:54:55

实际上,你应该张贴你想要的结果,否则我们不能给你真正想要的。就像@duffymo说的,你需要两个JOIN,这里有一个解决方案(或尝试):

代码语言:javascript
复制
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_id

SqlFiddle演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40739428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档