2011-10-21 70 views
58

當我的SQL語句中只有一個內部聯接時,它完美運行。我嘗試加入第二個表,現在我收到一個錯誤,說有一個語法錯誤(缺少運算符)。這裏有什麼問題?SQL多重聯接語句

adsFormView.SelectCommand = "SELECT * FROM [tableCourse] INNER JOIN [tableGrade] ON [tableCourse].[grading] = [tableGrade].[id] INNER JOIN [tableCourseType] ON [tableCourse].[course_type] = [tableCourseType].[id] WHERE [prefix]='" & myPrefix & "' AND [course_number]='" & myCourseNum & "'" 
+0

- 在消息框中顯示選擇命令以查看會發生什麼。我認爲你的加入可能沒有問題,問題在於引號或其他內容。 – MAW74656

+1

如果我沒有記錯,訪問語法是用括號括起每一層,所以試試'FROM [tableCourse] INNER JOIN [tableGrade] ON [tableCourse]。[grading] = [tableGrade]。[id](INNER JOIN [tableCourseType] ON [tableCourse]。[course_type] = [tableCourseType]。[id])' – billinkc

回答

125

對於多表連接,你必須巢額外加入括號:

SELECT ... 
FROM ((origintable 
JOIN jointable1 ON ...) 
JOIN jointable2 ON ...) 
JOIN jointable3 ON ... 

基本上,你參加過第一的每個額外的表,在你面前需要一個支架原始'FROM'表,以及匹配JOIN'on'子句上的右括號。

+9

這樣的非直觀的「功能」,用於*普通* SQL的人... – qJake

+0

這正是*我正在尋找的東西。它一直告訴我一些語法,或者當SQL管理工作室完美工作時,連接不正確。 – Paramone

22

MS Access(特別是Jet/ACE)需要帶多個連接的圓括號。嘗試:

adsFormView.SelectCommand = _ 
    " SELECT * FROM ([tableCourse] " & _ 
    " INNER JOIN [tableGrade] " & _ 
    "  ON [tableCourse].[grading] = [tableGrade].[id]) " & _ 
    " INNER JOIN [tableCourseType] " & _ 
    "  ON [tableCourse].[course_type] = [tableCourseType].[id] " & _ 
    " WHERE [prefix]='" & myPrefix & "'" & _ 
    " AND [course_number]='" & myCourseNum & "'" 
+0

「具體來說,Jet數據庫引擎」 - 不正確:這同樣適用於引擎的Access數據庫引擎(ACE)版本。 – onedaywhen

+0

我的觀點是,括號的要求來自db *引擎*,而不是*應用程序*。但是你是正確的,這個要求也適用於ACE/ADE /無論MS-is-calling-it-these-days。我相應地更新了我的答案。 – mwolfe02