Оператор множественного объединения SQL - PullRequest
68 голосов
/ 22 октября 2011

Когда в моем операторе 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 & "'"

Ответы [ 2 ]

148 голосов
/ 22 октября 2011

Для объединений с несколькими таблицами вы должны вкладывать дополнительные объединения в скобки:

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

в основном, для каждой дополнительной таблицы, к которой вы присоединяетесь после первой, вам нужен скобка перед исходным 'FROM'таблица и закрывающая скобка в соответствующем предложении JOIN 'on'.

22 голосов
/ 22 октября 2011

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 & "'"
...