Declaración de unión múltiple de SQL
Cuando solo tenía una combinación interna en mi declaración SQL, funcionó perfectamente. Intenté unirme a una segunda tabla y ahora aparece un error que dice que hay un error de sintaxis (falta operador). ¿Que esta mal aquí?
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 & "'"
Para uniones de varias tablas, debe anidar las uniones adicionales entre paréntesis:
SELECT ...
FROM ((origintable
JOIN jointable1 ON ...)
JOIN jointable2 ON ...)
JOIN jointable3 ON ...
Básicamente, por cada tabla adicional que una después de la primera, necesita un corchete antes de la tabla 'FROM' original y un corchete de cierre en la cláusula JOIN 'on' correspondiente.
MS Access (específicamente, Jet/ACE) requiere paréntesis con múltiples uniones. Intentar:
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 & "'"
A pesar de MS SQL Server, MS Access requiere paréntesis para una declaración JOIN múltiple. Básicamente, JOIN es una operación entre dos tablas. Cuando tienes más de un JOIN, de hecho, estás UNIENDO el resultado del JOIN anterior a otra tabla. Esta lógica se conecta en cascada para cualquier UNIÓN adicional. Por ejemplo, si tiene operaciones JOIN entre 4 tablas, debe escribirlo de la siguiente manera:
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