2011-10-21 15 views
58

Cuando tenía una sola combinación interna en mi declaración SQL, funcionó perfectamente. Intenté unirme a una segunda tabla, y ahora recibo un error que dice que hay un error de sintaxis (operador faltante). ¿Que esta mal aquí?instrucción de combinación múltiple de 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

-Mostrar el comando de selección en un cuadro de mensaje para ver lo que aparece. Creo que su unión podría estar bien, y el problema es con comillas o algo así. – MAW74656

+1

Si no recuerdo mal, la sintaxis de acceso hace que incluya cada capa entre paréntesis, intente 'FROM [tableCourse] INNER JOIN [tableGrade] ON [tableCourse]. [Grading] = [tableGrade]. [Id] (INNER JOIN [tableCourseType]) ON [tableCourse]. [Course_type] = [tableCourseType]. [Id]) ' – billinkc

Respuesta

125

Para múltiples uniones entre tablas, que tienen a anidar el extra une entre paréntesis:

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

básicamente, para cada mesa adicional se une más allá de la primera, necesita un soporte antes de la la tabla original 'FROM' y un corchete de cierre en la cláusula JOIN 'on' correspondiente.

+9

Una "característica" no intuitiva para personas acostumbradas a * normal * SQL ... – qJake

+0

Esto era * exactamente * lo que estaba buscando. No dejaba de decirme que algunas sintaxis o uniones eran incorrectas cuando funcionaban perfectamente en SQL Management Studio. – Paramone

22

MS Access (específicamente, Jet/ACE) requiere paréntesis con varias combinaciones. Proveedores:

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

" específicamente, el motor Jet db "- no verdadero: lo mismo se aplica a la versión del Motor de la Base de Datos de Acceso (ACE) del motor. – onedaywhen

+0

Mi punto era que el requisito para paréntesis proviene del motor db * *, no de la * aplicación *. Pero tiene razón, el requisito también se aplica a ACE/ADE/lo que sea-MS-lo-está-llamando-estos-días. Actualicé mi respuesta en consecuencia. – mwolfe02

Cuestiones relacionadas