Oracle
如何計算屬性在內部查詢中出現的次數?
我想寫出這個查詢:
哪些學生(姓名)從同一位教授那裡選修了一門以上的課程?
我有一個學生、課程和教授表。這是ER圖:
我有 4 張桌子:
Students
(student_id
是PK)Courses
(course_id
是PK,professor_id
是教授桌的FK)Takes_courses
(student_id
而且course_id
是PK)Professor
(professor_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;
下面的查詢:
- 查找所有獨特的學生/教授/課程組合(因此我們不會為兩次參加同一課程的學生獲得結果 - 不確定問題是否可能)。
- 對學生/教授配對進行分組,並過濾掉僅匹配單個課程的配對。
- 使用生成的學生 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在這裡