試着做出一個查詢,選擇下一季度的課程,你已經採取了先決條件。對我來說很困難的是,如果有一門課程有多個先決條件,而且你已經完成了一門。SQL查詢在大數據集上運行但速度很慢?
兩個表是記錄(學生,課程)和先決條件(課程,前提條件)
我的查詢嘗試的作品,但速度很慢:
select r.Student, p.Course
from Record r, Prerequisite p where r.Course = p.Prereq and p.Course not in
(select Course from (select r.Student, p.Course from Record r, Prerequisite p
where r.Course <> p.Prereq) a where a.Student = r.Student);
任何幫助將是巨大的!
的樣本數據
CREATE TABLE Prerequisite (Course CHAR(32), Prereq CHAR(32));
CREATE TABLE Record (
Student CHAR(32),
Course CHAR(32),
PRIMARY KEY (Student, Course)
);
INSERT INTO Prerequisite VALUES ('Class 3', 'Class 1');
INSERT INTO Prerequisite VALUES ('Class 6', 'Class 4');
INSERT INTO Prerequisite VALUES ('Class 4', 'Class 1');
INSERT INTO Prerequisite VALUES ('Class 4', 'Class 3');
INSERT INTO Prerequisite VALUES ('Class 8', 'Class 2');
INSERT INTO Prerequisite VALUES ('Class 8', 'Class 6');
INSERT INTO Prerequisite VALUES ('Class 5', 'Class 2');
INSERT INTO Prerequisite VALUES ('Class 9', 'Class 8');
INSERT INTO Prerequisite VALUES ('Class 7', 'Class 5');
--added Class 10 requires Class 1 and Class 2
INSERT INTO Prerequisite VALUES ('Class 10', 'Class 1');
INSERT INTO Prerequisite VALUES ('Class 10', 'Class 2');
INSERT INTO Record VALUES ('Bob', 'Class 1');
INSERT INTO Record VALUES ('Jan', 'Class 2');
--Bob Takes both Class 1 and Class 2 thus he can take Class 10
INSERT INTO Record VALUES ('Bob', 'Class 2');
所以結果應該是
Bob | Class 3
Jan | Class 5
Bob | Class 5
Bob | Class 10
編輯:小樣本數據添加
EDIT2:請參見下面的註釋瞭解更多詳細信息
EDIT3:只需意識到我的解決方案在查看Mhai的新解決方案時並不奏效並做出一個測試用例,表明它沒有工作,我也沒有爲這種情況工作。
使用新的測試用例更新了示例數據,也就是說,當您有一個學生已經爲一個課程同時採用了兩個先決條件時,他們應該選擇該課程。
添加一些示例數據。 – Mihai
和往常一樣 - 檢查索引併發布查詢計劃。 – TomTom
添加了我用來測試疑難案例的示例數據。我首先解決了如果只有一個可能的先決條件,通過檢查prerequisite.prereq是否包含記錄課程中的任何課程,學生已採取並將它與具有prerequisite.class中的prereq的課程進行匹配的情況,在一個類有多個prereq的情況下,它不起作用。 – blue