2017-09-23 72 views
3

我在我的數據庫students兩個表:獲取行值僅在特定列的值不存在

GRADE_REPORT:

+----------------+-------------+------+ 
|StudentNo  | SectionId | Grade| 
+----------------+-------------+------+ 
| 11    | 85   | B |  
| 17    | 112   | B | 
| 17    | 119   | C |  
| 17    | 135   | A | 
| 8    | 85)   | A |  
| 8    | 92   | A | 
+----------------+-------------+------+ 

學生:

+----------------+-------------+------+--------+----------------+ 
| StudentNumber | name  | Classification| DepartmentName | 
+----------------+-------------+---------------+----------------+ 
| 17    | Bill Smith | 1    |  CS  |  
| 8    | Bob Brown | 2    |  CS  | 
| 11    | Nick Fiener | 4    |  MATH  |  
+----------------+-------------+------+-----+---------+---------+ 

我試圖找回所有學生的學號,姓名和主要部門ho do在他們的課程中沒有任何A等級。所以,我期待下,當我運行查詢:

+----------------+-------------+----------------+ 
| StudentNumber | name  | DepartmentName | 
+----------------+-------------+----------------+ 
| 11    | Nick Fiener | MATH   | 

這是我的發言至今:

SELECT students.STUDENT.StudentNumber, students.STUDENT.name, 
    students.STUDENT.DepartmentName 
FROM students.GRADE_REPORT 
INNER JOIN students.STUDENT 
ON students.GRADE_REPORT.StudentNo = students.STUDENT.StudentNumber 
WHERE 
((students.GRADE_REPORT.Grade = "B" 
    OR 
    students.GRADE_REPORT.Grade = "C") 
    AND students.GRADE_REPORT.Grade != "A") 
GROUP BY students.GRADE_REPORT.StudentNo; 

編輯:

SELECT students.STUDENT.StudentNumber, students.STUDENT.name, students.STUDENT.DepartmentName 
    FROM students.STUDENT S 
     WHERE NOT EXISTS(SELECT students.GRADE_REPORT.StudentNo 
                FROM students.GRADE_REPORT gr 
                 WHERE gr.StudentNo = S.StudentNumber 
                  AND gr.Grade = "A"); 
+0

我根據M修改了代碼戈登的指示(請看帖子)。然而,我收到一個錯誤:'錯誤代碼:1054.'字段列表'中的未知列'students.STUDENT.StudentNumber'?誰能告訴我爲什麼? – loveTrumpsHate

+0

將'students.STUDENT.StudentNumber'替換爲's.studentnumber'和其他所有其他人 – zarruq

回答

2

使用not exists

select s.* 
from students s 
where not exists (select 1 
        from grade_report gr 
        where gr.student_no = s.student_no and gr.grade = 'A' 
       ); 
+0

我根據您的指示修改了代碼(請參閱帖子)。然而,我收到一個錯誤:'錯誤代碼:1054.'字段列表'中的未知列'students.STUDENT.StudentNumber'?你能告訴我爲什麼嗎? – loveTrumpsHate

+0

@lovesTrumpsHate。 。 。在這個查詢中沒有'students.STUDENT.studentNumber'。使用表別名。 –