2015-11-03 73 views
0

我有一張數據表,其中包含學生及其主題結果。學生會多次出現,每次出題都會出現一次。SQL選擇沒有任何實體在特定列中具有值的條目

**tableID,studentID,lastName,firstName,subject,grade** 
1,1a,Student1,Name1,English,A 
2,1a,Student1,Name1,Maths,A 
3,1a,Student1,Name1,Science,A 
4,2a,Student2,Name2,English,A 
5,2a,Student2,Name2,Maths,B 
6,2a,Student2,Name2,Science,A 
7,3a,Student3,Name3,English,A 
8,3a,Student3,Name3,Maths,A 

使用Microsoft Access SQL,我怎麼可以只選擇誰收到了一個他們的所有科目的學生呢?例如。在上表中,我只想選擇Student1和Student3的所有實例,我不想讓Student2因爲他們沒有收到所有的A。

回答

0

我可以用得到我想要的結果子查詢:

SELECT studentID, lastName, firstName 
FROM table 
WHERE grade = "A" 
AND studentID NOT IN (SELECT studentID FROM table WHERE grade <> "A" GROUP BY studentID) 
GROUP BY studentID, lastName, firstName 

這似乎排除了所有r除了A.之外,還得到了一個結果。

0

的方法之一是使用GROUP BYHAVING

select StudentId 
from t 
group by StudentId 
having max(grade) = min(grade) and max(grade) = 'A'; 
+0

不幸的是,這仍然顯示了收到B或其他成績的學生的條目。 – Tristan

+0

@Tristan。 。 。我看不出這個查詢如何返回具有「A」級以外的成績的學生。這似乎不可能。 –

+0

所以,這是我使用了SQL: 'SELECT studentID, 級FROM表 GROUP BY studenID, 級HAVING MAX(級)= MIN(級)和MAX(級)= 「A」;' 結果是一個ID列表,其等級顯示爲全部A.然而,當我查看其中一些學生的原始數據時,我可以看到該查詢簡單地省略了學生未獲得答案的科目。 – Tristan

1

獲取所有學生A級除了學生與其它級別

SELECT 
    studentID,lastName,firstName 
FROM 
(SELECT 
    studentID,lastName,firstName 
FROM 
    result 
WHERE 
    grade = 'A' 
GROUP BY 
    studentID,lastName,firstName) GradeA 
LEFT OUTER JOIN 
(SELECT 
    studentID,lastName,firstName 
FROM 
    result 
WHERE 
    grade <> 'A' 
GROUP BY 
    studentID,lastName,firstName) GradeOther 
    ON GradeA.studentId = GradeOther.StudentID AND GradeA.LAstName = GradeOther.LastName AND GradeA.FirstName = GradeOther.FirstName 
WHERE 
    GradeOther.StudentID IS NULL 
+0

這沒有奏效,「EXCEPT」關鍵字出現問題(MS Access似乎不支持這一點,我不斷收到有關缺少運算符的語法錯誤)。 但是,這確實讓我在正確的軌道上思考解決它 - 使用子查詢。 – Tristan

+0

@Tristan修改了不使用EXCEPT的答案 – Adish

相關問題