together tablas right outer left inner and sql ms-access join left-join

sql - tablas - right join oracle



LEFT JOIN SQL Join Expression no es compatible (1)

No puedo encontrar lo que está mal con esta expresión SQL:

SELECT DISTINCT PNLTERM.TAGSTRIP, TERMS.TERM, PNLTERM.STRIPSEQ, TERMS.WIRENO, TERMS.REF, TERMS.MFG, TERMS.CAT, TERMS.BLOCK, PNLTERM.HDL, TERMS.WDBLKNAM, TERMS.JUMPER_ID, WIREFRM2.WIRELAY FROM (PNLTERM LEFT JOIN TERMS ON PNLTERM.LINKTERM = TERMS.LINKTERM) INNER JOIN WIREFRM2 ON TERMS.HDL = WIREFRM2.COMP_HDL;

Tiene algo que ver con la combinación izquierda en PNLTERM / TÉRMINOS; ya que funciona con una unión interna y derecha, pero no con una combinación izquierda. El error es ''Unir expresión no compatible''.

¿Algunas ideas?


MS Access tiene algunas reglas con respecto al uso de combinaciones LEFT / RIGHT con las combinaciones INNER. Específicamente, hay una regla con respecto a su mezcla. Se explica aquí :

Una unión IZQUIERDA o una UNIÓN DERECHA se pueden anidar dentro de una UNIÓN INTERNA, pero una UNIÓN INTERIOR no se puede anidar dentro de una UNIÓN IZQUIERDA o una UNIÓN DERECHA.

Tienes un par de opciones: puedes convertir la segunda unión en una combinación izquierda:

SELECT DISTINCT PNLTERM.TAGSTRIP, TERMS.TERM, PNLTERM.STRIPSEQ, TERMS.WIRENO, TERMS.REF, TERMS.MFG, TERMS.CAT, TERMS.BLOCK, PNLTERM.HDL, TERMS.WDBLKNAM, TERMS.JUMPER_ID, WIREFRM2.WIRELAY FROM (PNLTERM LEFT JOIN TERMS ON PNLTERM.LINKTERM = TERMS.LINKTERM) LEFT JOIN WIREFRM2 ON TERMS.HDL = WIREFRM2.COMP_HDL;

O bien, puede cambiar la consulta, de modo que la unión INNER sea lo primero:

SELECT DISTINCT PNLTERM.TAGSTRIP, TERMS.TERM, PNLTERM.STRIPSEQ, TERMS.WIRENO, TERMS.REF, TERMS.MFG, TERMS.CAT, TERMS.BLOCK, PNLTERM.HDL, TERMS.WDBLKNAM, TERMS.JUMPER_ID, WIREFRM2.WIRELAY FROM (WIREFRM2 INNER JOIN TERMS ON TERMS.HDL = WIREFRM2.COMP_HDL) RIGHT JOIN PNLTERM ON PNLTERM.LINKTERM = TERMS.LINKTERM;