Declaración de unión múltiple de SQL

Resuelto Sara asked hace 12 años • 3 respuestas

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 & "'"
Sara avatar Oct 22 '11 03:10 Sara
Aceptado

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.

Marc B avatar Oct 21 '2011 20:10 Marc B

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 & "'"
mwolfe02 avatar Oct 21 '2011 20:10 mwolfe02

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
Abdollah avatar Dec 03 '2019 07:12 Abdollah