2010-03-11 51 views
8

Tôi đang gặp một số rắc rối với câu lệnh SQL phải tìm số lượng học sinh tham dự khóa học. Thiết kế Cơ sở dữ liệu của tôi trông giống như sau:Trợ giúp với câu lệnh SQL (JOIN)

Bảng Khóa học: id | course_name

Bảng Học viên: id | tên

Và để kết nối các mối quan hệ hai nhiều-nhiều Tôi đã một bảng:

Bảng course_student: id | course_id | student_id

Điều tôi muốn là tìm hiểu xem có bao nhiêu sinh viên đang theo học khóa học có tên "Thiết kế cơ sở dữ liệu". Tôi biết rằng ID là "1" nhưng hãy nói rằng tôi không biết, câu lệnh SQL của tôi sẽ như thế nào?

Tôi đã cố gắng báo cáo khác nhau với khác nhau tham gia lần đầu tiên chọn ID đúng từ nhiên bảng, nơi tên là "Cơ sở dữ liệu Thiết kế" và hôm sau tôi đã tìm kiếm trong course_student tôi bảng nơi course_id bằng id được thành lập (trong trường hợp này là 1) và nơi tất cả student_id được kết nối với id này.

Tôi biết đó là một mô tả phức tạp chút vì vậy hãy cho tôi biết nếu tôi phải giải thích nó theo cách tốt hơn.

Cảm ơn Mestika

Trả lời

9

Bạn có thể thử một cái gì đó giống như

SELECT COUNT(cs.student_id) 
FROM Course c INNER JOIN 
     course_student cs ON c.id = cs.course_id 
WHERE c.course_name = 'Database Design' 

Bạn không cần phải tham gia vào bảng Học sinh như bạn đã có ID trong bảng course_student, vì vậy 1 ít tham gia.

+1

darn bạn và kỹ năng đánh máy của bạn –

+1

Tốt nhất, @astander. Đã làm việc nó ra khi bạn đăng. GJ. – cazlab

+0

HEHE, xin lỗi anh bạn. Đã có SSMS mở X-) –

0
SELECT count(a.id) 
FROM Course a 
INNER JOIN Course_Student b 
ON a.id = b.course_id 
WHERE a.course_name = 'Database Design' 
+0

Có vẻ như người ngoài cuộc đã đánh tôi với nó. – Gabe

+0

Anh ta đánh bại tất cả chúng ta. '/ – cazlab

+1

cho ví dụ thứ hai, bạn thậm chí sẽ không phải tham gia vào bảng * Khóa học *. –

0

chỉ là một phong cách hơi khác nhau, nhưng cùng một kết quả

select COUNT(cs.student_id) as counter from Course c, course_student cs where c.id = cs.course_id and c.course_name = 'Database Design'

+1

Tham gia ngầm định là không hợp lệ. Xin vui lòng không khuyến khích việc sử dụng techinique nghèo này. – HLGEM

+0

Tôi đã sử dụng kỹ thuật này rất thành công trong một thời gian dài. Vui lòng giải thích những gì có lỗi với điều này. – Jay

Các vấn đề liên quan