这是我在oracle实验室考试中无法回答的问题。
鉴于架构:
(Courses: cid(int), deptid(int)...);
(Students: sid(int), sname (string), deptid(int)...);
(Participation: cid(int), sid(int), ...);
学生可以参加他所在部门以外的课程。
需要获取其部门提供所有课程的学生的姓名。
如何在sqlplus中执行此操作?
答案 0 :(得分:2)
SELECT s.sid, s.sname, s.deptid
FROM Students s
INNER JOIN Participation p
ON s.sid = p.sid
INNER JOIN Courses c
ON p.cid = c.cid
AND s.deptid = c.deptid
GROUP BY s.sid, s.sname, s.deptid
HAVING COUNT(DISTINCT c.cid) = (SELECT COUNT(*)
FROM Courses c2
WHERE c2.deptid = s.deptid)
答案 1 :(得分:0)
我现在无法检查查询,因此我不知道是否有语法错误,无论如何,您可以尝试这个想法来达到您的要求。
SELECT studentName
FROM
(SELECT stu.sname AS studentName,
cour.deptid AS dept,
COUNT(*) AS assistedCoursesByDpt,
Max(cour.total) AS total
FROM students stu,
participation part,
(SELECT cour.deptid,COUNT(*) AS total FROM courses cour GROUP BY cour.deptid
) AS cour
WHERE stu.sid=part.sid
AND part.cid =cour.cid
GROUP BY stu.sid,
cour.deptid
)
WHERE total=assistedCoursesByDpt
我的想法是创建一个子查询(cour),它有一个新的计算列,总债务的课程。然后你可以将这个总数与部门的agrouped学生课程进行比较。