2016-07-22 79 views
0

假設我有三個表Student,Class,Student_Class(鏈接表)。查詢sql查找所有未註冊的特定類的學生

Table:Student 
Student_ID 
FirstName 
LastName 

Table:Class 
Class_ID 
Class_name 

Table:Student_Class (Linking Table) 
StudentClass_ID 
Class_ID 
Student_ID 

給定一個特定的Class_ID,我想知道所有未註冊該特定班級的學生。

我試過以下,但它不起作用。可以說,我嘗試類ID = 3

SELECT DISTINCT Student.* 
FROM Student 
INNER JOIN Student_Class 
    ON Student.Student_ID = Student_Class.Student_ID 
WHERE ((NOT (Student_Class.Class_ID)= 3)) 
+0

您是否使用'MySQL'或'MS Access'?它們不是同一件事。 – Siyual

+0

我正在使用MS-Accesss –

回答

0

流量

  1. 匹配所有學生,所有類
Student INNER JOIN Student_Class ON (Student.Student_ID = Student_Class.Student_ID)
  • 拒絕學生特殊類別(例3)
  • (Student_Class.Class_ID <> 3)

    查詢:

    SELECT Student.* 
        FROM Student INNER JOIN Student_Class 
        ON (Student.Student_ID = Student_Class.Student_ID) 
    WHERE (Student_Class.Class_ID <> 3); 
    

    爲了讓他們沒有在任何課程的所有學生,請嘗試以下:

    SELECT Student.* 
        FROM 
         (
         SELECT Student.* 
          , Student_Class.Class_ID 
          FROM Student LEFT JOIN Student_Class ON Student.Student_ID = Student_Class.Student_ID 
         WHERE ((Student_Class.Class_ID <> 3) OR (Student_Class.Class_ID IS NULL)) 
         ) Student LEFT JOIN Class ON Student.Class_ID = Class.Class_ID 
    ;

    數據:

    enter image description here

    結果:

    enter image description here

    +0

    如果學生根本沒有註冊*任何*類,該怎麼辦?這不會捕獲任何不在'Student_Class'表中的學生。 – Siyual

    +0

    @Siyual 我不知道可以在MS Access中使用左連接。 但它是類似的我認爲:

     SELECT Student.* FROM Student LEFT JOIN Student_Class ON (Student.Student_ID = Student_Class.Student_ID) Student_Class INNER JOIN Class ON (Student_Class.Class_ID = Class.Class_ID) WHERE (Student_Class.Class_ID <> 3) ; 

    +0

    試過這個。不工作。向我展示正在參加班級3的學生,這是我不想要的。這可能是因爲這些同樣的學生可能會參加一個班級4,並且班級4與這些學生在鏈接表中關聯。因此它顯示了它們。 –

    0

    下面的查詢將顯示沒有參加一個或多個班級的所有學生,包括班級名稱。

    SELECT Student.Student_ID, Student.FirstName, Student.LastName, 
    Class.Class_ID, Class.Class_name 
    FROM Class, Student 
    WHERE NOT EXISTS 
    (
    SELECT * 
    FROM Student_Class 
    WHERE Student_Class.Student_ID = Student.Student_ID AND 
    Student_Class.Class_ID = Class.Class_ID