2013-07-16 29 views
0

我已經嘗試了很多方法,我懷疑不存在可能會有幫助,但我不知道如何實現SQL語句。有人幫助我嗎?MS Access SQL顯示未被學生採用的課程

我有MS Access數據庫中的三個表。

Students (Student Name, Email) 
Courses (Course Name, Fees) 
Registration (Course Name, Student Name) 

我想現在創建一個查詢,可以告訴我,每個學生沒有之前所採取的所有課程。這將使我的註冊經理能夠追求他們進行更多的課程註冊。

我該如何輕鬆在MS ACCESS中做到這一點?生成的查詢應該是:

詹姆斯|高級閃存
詹姆斯|高級編輯
阿德里安|基本編輯
阿德里安|基本的Flash
阿德里安|高級閃存
阿德里安|高級編輯

(詹姆斯已經採取了所有'基本'類阿德里安還沒有采取'基本'和'高級'類)

回答

1

這個想法是創建stu凹痕和課程。然後做一個left joinRegistrations。任何匹配是沒有采取的課程。

訪問語法與其他數據庫有點不同。我認爲以下是這種類型的查詢的訪問語法:

select s.studentName, c.CourseName 
from ((select studentName 
     from students 
    ) s, 
     (select CourseName 
     from courses 
    ) c 
    ) left join 
    Registration r 
    on r.StudentName = s.StudentName and 
     r.CourseName = s.CourseName 
where r.StudentName is NULL; 

編輯:

我認爲括號可能要正確排序的訪問,瞭解連接。無論如何,以下都應該起作用。該driver子查詢得到學生和課程,然後將其用於left join的所有組合:

select driver.StudentName, driver.CourseName 
from (select distinct StudentName, CourseName 
     from students, courses 
    ) driver left join 
    Registration r 
    on r.StudentName = driver.StudentName and 
     r.CourseName = driver.CourseName 
where r.StudentName is NULL; 
+0

thaks的答案,戈登,但奇怪的是,我得到左語法錯誤加入。 Access是否支持LEFT JOIN? – user2418485

+0

超級!我們很近,戈登。但是,現在我得到了一切。意思是說,我得到了他們所有的課程以及他們沒有學過的所有課程。我迷失於修復它。分享我如何解決這個問題?謝謝,戈登:) – user2418485

+0

另外,戈登,無論如何,我可以做到這一點,而不使用'驅動程序',因爲我的開發環境無法在sql語句中識別它。任何具有Driver的語句,IDE都會選擇不將它們包含在存儲在Access中的查詢列表中。 :( – user2418485

相關問題