Oracle

如何計算屬性在內部查詢中出現的次數?

  • October 18, 2017

我想寫出這個查詢:

哪些學生(姓名)從同一位教授那裡選修了一門以上的課程?

我有一個學生、課程和教授表。這是ER圖:

在此處輸入圖像描述

我有 4 張桌子:

  • Studentsstudent_id是PK)
  • Coursescourse_id是PK,professor_id是教授桌的FK)
  • Takes_coursesstudent_id而且course_id是PK)
  • Professorprofessor_id是PK)

我的計劃:

Select student_name
From Student
Where student_id > Some (Select *
                        From Courses Natural Join Takes_Courses
                        Group By professor_id)

我無法在上面執行此查詢。我應該如何計算出現在內部查詢中的 student_id 的數量?

試驗台:

create table students (student_id integer, student_name varchar(100));
insert into students(student_id,student_name)
select 1, 'Alice' from dual
union all
select 2, 'Bob' from dual
union all
select 3, 'Charlie' from dual;
create table courses (course_id integer, professor_id integer);
insert into courses
select 9+level, mod(level,3)+101 from dual connect by level<=10;
create table takes_courses (student_id integer, course_id integer);
insert into takes_courses
select student_id, course_id
from students cross join courses
where course_id<10+student_id*3;

下面的查詢:

  1. 查找所有獨特的學生/教授/課程組合(因此我們不會為兩次參加同一課程的學生獲得結果 - 不確定問題是否可能)。
  2. 對學生/教授配對進行分組,並過濾掉僅匹配單個課程的配對。
  3. 使用生成的學生 ID 查找學生姓名。
select student_name
from students
where student_id in ( select student_id
                      from( select distinct student_id, professor_id, course_id
                            from takes_courses join courses using(course_id) )
                      group by student_id, professor_id
                      having count(*)>1 );
| 學生名 |
| :----------- |
| 鮑勃 |
| 查理 |

dbfiddle在這裡

引用自:https://dba.stackexchange.com/questions/188522