/ / ¿Puedo mezclar LEFT JOINS y INNER JOINS en Access 2010 SQL? - sql, ms-access, join, ms-access-2010

¿Puedo mezclar LEFT JOINS y INNER JOINS en Access 2010 SQL? - sql, ms-access, join, ms-access-2010

TL; DR: Quiero saber si es posible mezclar las combinaciones LEFT e INNER en Access, ya que las combinaciones IZQUIERDA son (como es de esperarse) ralentizando mi consulta significativamente.

Versión completa: Ayer estuve teniendo un problema resulta que fue debido a que Access 2010 no me gustaba mezclando LEFT e INNER JOINs en una consulta combinada. Un pequeño resumen aquí

Tuve tres consultas, que deseaba combinar. Cada una de las consultas constitutivas se construyó utilizando varias tablas e INNER JOINs.

Entonces necesitaba combinar las tres consultas. Q1 contenía más resultados que Q2 y Q3, y donde no hubo coincidencias en Q2 y / o Q3, todavía quería devolver los resultados de Q1. De manera similar, cuando Q2 arrojó un resultado, Q3 no lo hizo, quería devolver resultados nulos en lugar de resultados nulos, y viceversa.

Todo esto requirió una cuarta consulta de unión.Q1, Q2 y Q3 usando uniones IZQUIERDA; pero esto causó un error de "identificador multiparte no puede ser enlazado". Esto se resolvió reemplazando todas las UNIONES INTERIORES en las consultas de los constituyentes con JUNTAS IZQUIERDA. Básicamente, asumí que el cuarto trimestre se vería solo en los resultados de las otras consultas, mientras que en realidad estaba resolviéndolo todo de una vez, de ahí el error.

Por lo tanto, he resuelto el error real, pero ahora estoyejecutando cuatro consultas, todas usando uniones IZQUIERDA. Aunque esto está devolviendo los mismos resultados en cada una de las consultas de los constituyentes, es mucho más lento debido a cómo funcionan las uniones externas.

¿Hay alguna manera de que pueda obtener mi combinaciónla consulta para que funcione como lo esperaba originalmente (es decir, para producir Q1, Q2 y Q3 utilizando INNER JOINS para la velocidad, luego el Q4 los trata como datos planos cuando los IZQUIERDA UNIENDO).

Podría usar algunos VBA para colocar cada una de las consultas en una tabla temporal y hacer que Q4 las analice, pero esperaba hacerlo todo en SQL. Se puede hacer esto?

Respuestas

1 para la respuesta № 1

La respuesta a la pregunta del título es: sí, puede mezclar combinaciones externas e internas:

SELECT
A.X,
B.Y,
C.Z
FROM
A RIGHT JOIN (
B INNER JOIN (
C LEFT JOIN (
D
) ON C.DID = D.ID
) ON B.CID = C.ID
) ON A.BID = B.ID

La respuesta a la pregunta del cuerpo es: no, no puede unir las tablas internas, y la combinación externa ese resultado como si la unión interna se hubiera calculado como una combinación a la izquierda. Una vez que se realiza una unión, su resultado se bloquea y se asemeja a un nuevo conjunto de datos.

Si desea coincidencias nulas desde Q1 hasta Q4, entonces debe unir exteriormente Q1 hasta Q4. Es así de simple.