讓我們試著正確措辭,以下是我對相關表格的總結:
學生被分配到專業,而課程被分配到專業(即獲得特定專業所需的課程),因此,我有以下兩個表,定義哪些學生和課程被分配到哪些專業。
- 表 "students_assigned_majors "包含ref_id (PK), student_id (FK), major_id (FK).
- 表 "courses_assigned_majors "包含ref_id (PK), course_id (FK), major_id (FK).
最后,我有這樣一個表,叫做 6. "completed_courses",包含哪些學生完成了哪些課程的資訊,列是ref_id (PK), student_id (FK), course_id (FK), completion_date。
我想創建一個查詢,檢查哪些學生因為缺少一門專業要求的課程而沒有資格從該專業畢業。如果任何課程是在5年前完成的,則該課程是無效的。
我想在一個現有的表格上顯示這些學生和他們的專業。
我不確定這是否可以完全在MS Access SQL中完成...。我在相關表單的On_current事件上起草了一個VBA程序,現在看來是這樣的。(仍然是未經測驗的偽代碼,但這是我的想法)
Private Sub Form_Current(main_parameter as String)
Dim Sql_cour As String
Dim Sql_stud As String
Dim db As 資料庫
Dim rs_courses As DAO.Recordset
Dim rs_students As DAO.Recordset
Set Sql_cour = "SELECT course_id FROM courses_assigned_major WHERE major_id = {major_parameter}; "
Set Sql_stud = "SELECT student_id, first_name, last_name FROM students_assigned_majors as SAM LEFT OUTER JOIN students as S on (SAM.student_id = S.student_id) WHERE SAM.major_parameter }; "
Set rs_courses = db.OpenRecordset(Sql_cour)
Set rs_students = db.OpenRecordset(Sql_stud)
Do While Not rs_students.EOF
Do While Not rs_courses.EOF
'check completed_courses table for student_id, course_id, date of course < 5 years ago
'如果不符合條件'。
'將學生加入新的查詢/表 "not_eligible"。
Exit 內部 Loop
rs_courses.MoveNext
Loop[/span
rs_students.MoveNext
回圈 rs_students.MoveNext
End Sub
我正在尋找關于完成這一任務的最佳方法的一般建議,以及根據你的經驗,這一起草的解決方案是否值得投入時間來完成,或者我是否完全偏離了軌道。
更具體地說,如果這是要走的路,一些進一步的不確定因素是:
感謝您的任何幫助,希望能提供一個有趣的挑戰。 謝謝
uj5u.com熱心網友回復:
考慮用這個查詢來尋找沒有完成相關專業要求的課程的學生:
SELECT stud_maj_courses.student_id, stud_maj_courses.main_id_fk_SAM, stud_maj_courses.course_id_fk_CAM
FROM (
(SELECT students.student_id, students_assigned_majors.main_id_fk_SAM, courses_assigned_majors.course_id_fk_CAM
FROM (students INNER JOIN students_assigned_majors ON students.student_id = students_assigned_majors.student_id fk_SAM)
INNER JOIN courses_assigned_majors ON students_assigned_majors.main_id_fk_SAM = courses_assigned_majors.main_id_fk_CAM)
AS stud_maj_courses
INNER JOIN students ON stud_maj_courses.student_id = students.student_id)
LEFT JOIN completed_courses ON (stud_maj_courses.course_id_fk_CAM = completed_courses.course_id_fk_CC)
AND (stud_maj_courses.student_id = completed_courses.student_id_fk_CC)
WHERE (((completed_courses.student_id_fk_CC) Is Null)) OR (((compleed_courses. completion_date)<#5/31/2016#)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/314466.html
標籤:
上一篇:Access查詢中空格前的文本
