我有3张桌子:
Student (Id, Name, Country)
Course (CrsCode, CrsName, Type, Instructor)
Results(Id, CrsCode, Grade)
我必须使用SQL查询在q下面解决。 Id和CrsCode是每个表中的关键字段。 “类型”字段指定课程类型,例如MATH,STAT,SYSC,TTMG,ELEC等。
以下是第3部分的样本数据。第1张图片是课程表,第2张图片是结果表
我可以使用以下SQL查询解决第一个问题:
SELECT R.ID FROM RESULTS R JOIN COURSE C ON C.CRSCODE = R.CRSCODE WHERE C.TYPE="TTMG" OR C.TYPE ='SYSC
对于第二个问题,我认为我们必须再次联系2nd (Course) and 3rd (Results) table in order to get the result
。我们必须在这里讨论具体案例。 We have to consider a case that there is one specific student who is taking all courses(CrsCode) and we have to find the id of that student
。
我认为查询仍然与问题1相同,但这次会有一点点变化:
SELECT R.ID FROM RESULTS R JOIN COURSE C
在课程C之后我没有包含任何内容,因为我之后不确定答案。任何指针都将受到高度赞赏。
答案 0 :(得分:1)
查找参加每门课程的学生的ID。
假设课程表包含学生可以学习的所有课程,您可以group by
results
表中的id列,检查计数是否等于course
中的行数表。
SELECT ID
FROM RESULTS
GROUP BY ID
HAVING COUNT(DISTINCT CRSCODE) = (SELECT COUNT(*) FROM COURSE)
编辑:基于OP的评论
查找参加每个TTMG或SYSC课程的学生的身份
SELECT r.id
FROM course c
JOIN RESULTS r on c.CRSCODE=r.CRSCODE
GROUP BY r.ID
HAVING COUNT(case when type = 'SYSC' then r.CRSCODE end) = (SELECT COUNT(*) FROM COURSE WHERE type = 'SYSC')
OR COUNT(case when type = 'TTMG' then r.CRSCODE end) = (SELECT COUNT(*) FROM COURSE WHERE type = 'TTMG')