SQL-从课程和主题中筛选
我需要帮助解决这个问题: 显示所有CI或CI的学生ID、姓名和课程的查询 参加COSC121、COSC126和MATH111三门课程的UT学生。 用学生ID排序结果。提示:考虑使用自连接。 以下是表格: 学生 学生证 史都华名字 节目 等级 学生证 课程号 等级 这是我到目前为止所拥有的SQL-从课程和主题中筛选,sql,oracle,sqlplus,Sql,Oracle,Sqlplus,我需要帮助解决这个问题: 显示所有CI或CI的学生ID、姓名和课程的查询 参加COSC121、COSC126和MATH111三门课程的UT学生。 用学生ID排序结果。提示:考虑使用自连接。 以下是表格: 学生 学生证 史都华名字 节目 等级 学生证 课程号 等级 这是我到目前为止所拥有的 SELECT s.student_id, s.stu_name, s.program FROM students s, grades g WHERE s.student_id = g.student_id AN
SELECT s.student_id, s.stu_name, s.program
FROM students s, grades g
WHERE s.student_id = g.student_id AND
(program = 'CIS' OR program = 'UT') AND
course_id = 'COSC126'
ORDER BY student_id;
如果我将course\u id='COSC126'行更改为course\u id='COSC121'和course\u id='COSC126'和course\u id='MATH111',我将不会得到任何结果。。提前谢谢你 接受自连接提示,我们可以尝试:
SELECT
s1.student_id,
s1.stu_name,
s1.program
FROM students s1
INNER JOIN students s2
ON s1.student_id = s2.student_id
INNER JOIN students s3
ON s1.student_id = s3.student_id
WHERE
s1.program IN ('CIS', 'UT') AND
s1.course_id = 'COSC121' AND
s2.course_id = 'COSC126' AND
s3.course_id = 'MATH111';
对于这类问题,我通常使用聚合方法:
SELECT
student_id,
stu_name,
program
FROM students
WHERE
program IN ('CIS', 'UT') AND
course_id IN ('COSC121', 'COSC126', 'MATH111')
GROUP BY
student_id,
stu_name,
program
HAVING
COUNT(DISTINCT course_id) = 3;
这是你的问题
select s.student_id, s.stu_name, s.program
from students s
inner join grades g on s.student_id = g.student_id
inner join students t1 on t1.student_id = s.student_id and t1.course_id = 'COSC121'
inner join students t2 on t2.student_id = s.student_id and t2.course_id = 'COSC126'
inner join students t3 on t3.student_id = s.student_id and t3.course_id = 'MATH111'
where
s.program in ('CIS', 'UT') or t1.program in ('CIS', 'UT') or t2.program in ('CIS', 'UT')
or t3.program in ('CIS', 'UT')