Wenn ich nur einen inneren Join in meiner SQL-Anweisung hatte, funktionierte es perfekt. Ich habe versucht, einer zweiten Tabelle beizutreten, und jetzt wird ein Fehler angezeigt, der besagt, dass ein Syntaxfehler vorliegt (fehlender Operator). Was ist hier falsch?
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 & "'"
FROM [tableCourse] INNER JOIN [tableGrade] ON [tableCourse].[grading] = [tableGrade].[id] (INNER JOIN [tableCourseType] ON [tableCourse].[course_type] = [tableCourseType].[id])
Antworten:
Bei Verknüpfungen mit mehreren Tabellen müssen Sie die zusätzlichen Verknüpfungen in Klammern verschachteln:
SELECT ... FROM ((origintable JOIN jointable1 ON ...) JOIN jointable2 ON ...) JOIN jointable3 ON ...
Grundsätzlich benötigen Sie für jede zusätzliche Tabelle, der Sie nach der ersten beitreten, eine Klammer vor der ursprünglichen 'FROM'-Tabelle und eine schließende Klammer in der passenden JOIN' on'-Klausel.
quelle
MS Access (insbesondere Jet / ACE) erfordert Klammern mit mehreren Verknüpfungen. Versuchen:
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 & "'"
quelle
Trotz MS SQL Server benötigt MS Access Klammern für eine Mehrfach-JOIN-Anweisung. Grundsätzlich ist JOIN eine Operation zwischen zwei Tabellen. Wenn Sie mehr als einen JOIN haben, verbinden Sie das Ergebnis des vorherigen JOIN tatsächlich mit einer anderen Tabelle. Diese Logik wird für jeden zusätzlichen JOIN kaskadiert. Wenn Sie beispielsweise JOIN-Operationen zwischen 4 Tabellen haben, müssen Sie diese wie folgt schreiben:
SELECT * FROM ( ( Table1 JOIN Table2 ON Table1.column1 = Table2.column2) --result of JOIN is treated as a temp table JOIN Table3 ON Table1.column1 = Table3.column3 ) --result of JOIN is treated as another temp table JOIN Table4 ON Table4.column4 = Table2.column2
quelle