這是一個我在Oracle實驗考試中無法回答的問題。尋找sql中的參與總數
鑑於模式:
(Courses: cid(int), deptid(int)...);
(Students: sid(int), sname (string), deptid(int)...);
(Participation: cid(int), sid(int), ...);
學生可以參加他的部門以外的課程。
需要獲得由他的部門提供的所有課程的學生的姓名。
如何在sqlplus中做到這一點?
這是一個我在Oracle實驗考試中無法回答的問題。尋找sql中的參與總數
鑑於模式:
(Courses: cid(int), deptid(int)...);
(Students: sid(int), sname (string), deptid(int)...);
(Participation: cid(int), sid(int), ...);
學生可以參加他的部門以外的課程。
需要獲得由他的部門提供的所有課程的學生的姓名。
如何在sqlplus中做到這一點?
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)
我不能tesst查詢現在,所以我不知道如果我有一個語法錯誤,反正你可以試試這個想法實現您的要求。
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),它有一個新的計算列,即總債務課程。然後你可以將這個總數與部門分組的學生課程進行比較。
幾乎與此問題相同:http://stackoverflow.com/questions/7803775/sql-queries-involving-for-all/7803860#7803860 –