2017-04-21 13 views
-1

全部!我正在参加数据库课,并有几个问题对我来说非常混乱。下面是我的表格我们如何选择接受戴维森教授的所有课程的学生,以及如何选择教授至少3个班级的所有教师姓名?

Student(S_ID, S_FIRST_NAME, S_LAST_NAME, S_MAJOR) 

Course(C_ID, C_NAME, C_INST_NAME, C_ROOM) 

takes(S_ID,C_ID) 

Q-1.i想要选择所有参加戴维森授课的所有课程的student_id。我试着用这个代码

select s.S_ID from student s inner join (select t.S_ID from takes t inner join 
course c on t.C_ID = c.C_ID group by t.S_ID having sum(case when c.C_INST_NAME 
= 'Davidson' then 1 else 0 end) = 3) t on s.S_ID = t.S_ID; 

它的作品,因为我知道戴维森多少班教(在我的情况3)。如果我们不知道他教授的课程有多少,我们如何编写查询?

Q-2。我想选择教授至少3班的所有教师。对于这个问题我没有以下

select distinct C_INST_NAME from course where C_ID >= 3; 
+-------------+ 
| C_INST_NAME | 
+-------------+ 
| Peterson | 
| Davidson | 
| Jackson  | 
| Hanney  | 
+-------------+ 

但我得到了所有的教练,任何帮助,将不胜感激谢谢!

+0

请参阅http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query – Strawberry

回答

-1

Q1。

SELECT 
    S_ID, GROUP_CONCAT(C_ID ORDER BY C_ID ASC) 
FROM 
    takes 
WHERE 
    GROUP_CONCAT(C_ID ORDER BY C_ID ASC) = ( 
    SELECT 
     GROUP_CONCAT(Course.C_ID ORDER BY C_ID ASC) 
    FROM 
     Course 
    WHERE 
     Course.C_INST_NAME = "Davidson" 
) 
GROUP BY 
    S_ID 

Q2。

SELECT 
    COUNT(C_ID) AS "numClassesTaught", Course.C_INST_NAME 
FROM 
    Course 
GROUP BY 
    Course.C_INST_NAME 
HAVING 
    numClassesTaught >= 3 

这些都应该工作。

+0

Q1答案绝对不符合要求。对于Q2的回答,显然,你选择了错误的东西。 – Strawberry

+0

@ user2278120对于问题1,提供的代码给了我这个学生,即使他们只有一个戴维森课程,我也想要那些从戴维森接受所有课程的学生。而第二个代码给了我'0'输出。 – Anonymous

+0

阅读Q1错误,更新Q1的答案。 – user2278120

相关问题