2016-11-22 72 views
0

我有3个表选择所有课程+教师人数

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 

正如你所看到的,当然数学只有1名教师(约翰),但课程英语有2名教师(约翰和史蒂夫)。

我想选择表格课程中的所有课程以及每门课程的教师人数。我怎样才能做到这一点?

在此先感谢!

+0

**过程中的数学只有1名教师(约翰),但课程有英语教师2 **,是老师或用户清除它。 – Karthi

+0

老师和用户是一样的...用户是'老师'。 – yesterday

+0

您需要学习SQL。这似乎是一个初学者的作业问题。你需要两个JOIN。 – duffymo

回答

0

像这样的事情?

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的逻辑,并使用一个合成主键代替。

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

其实,你应该发布你想要的结果,或者我们不能给你真正想要的。就像@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_id 

SqlFiddle Demo Here