2011-04-20 23 views
3

我要運行在Access數據庫以下查詢:LEFT JOIN與內部聯合起來MS-訪問

SELECT School.Name, Student.Name, Grade.Grade 
    FROM((`School` `School` LEFT JOIN `Student` `Student` ON `School`.`ID`=`Student`.`SchoolID`) INNER JOIN `Grade` `Grade` ON `Student`.`GradeID` = `Grade`.`ID`) 

這給我的錯誤「加入表達不支持」,但如果我改變LEFT加入到內部聯接,它運行正確。我認爲在ms-access上同時使用這兩個連接的方式可以有不同的方式。任何人都可以告訴我這個查詢中有什麼問題和/或不支持這個問題的原因。

謝謝

回答

6

我在Access的查詢設計器中重新創建了您的查詢。正如你發現的那樣,查詢與INNER一起處理兩個連接。但是,當我嘗試將第一個INNER JOIN切換爲LEFT JOIN時,查詢設計者抱怨「模糊外部聯接」。兩個加入的左邊都是有效的,兩邊都是INNER。

如果第一次連接需要使用LEFT,第二次使用INNER,則可以將第二次連接中的表移動到子查詢中。

SELECT 
    School.[Name] AS school_name, 
    sub.[Name] AS student_name, 
    sub.Grade 
FROM 
    School LEFT JOIN (
     SELECT 
      Student.SchoolID, 
      Student.[Name], 
      Grade.Grade 
     FROM 
      Student INNER JOIN Grade 
      ON Student.GradeID = Grade.ID) AS sub 
    ON School.ID = sub.SchoolID; 
+0

非常感謝你的回答!它運作良好! – 2011-04-24 16:40:23

0

from和join語法是錯誤的。

SELECT School.Name, Student.Name, Grade.Grade 
FROM Grade 
left join Student on ... 
left join School on ... 

其中 「...」 是 「<主鍵> = <外鍵>」。

+0

那麼如何使用內部連接???任何想法pls ??? – 2011-04-20 04:14:14

+0

我不知道你每個表的列名,但它會像這樣:left join Student.ID = Grade.StudentID left join School.ID = Student.SchoolID – 2011-04-20 04:31:03

2

StudentGradeID可能爲空,因爲您在Student上執行了LEFT JOIN,它可能不適用於您的第二次加入。

因此,基本上,只要你做一個LEFT JOIN,您不能使用任何在將來這些表列的JOINS