2016-11-22 59 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

相關問題