usar outer multiple left inner full como clausulas anidados sql ms-access join inner-join

sql - outer - left join access



MĂșltiple INNER JOIN ACCESO A SQL (2)

El acceso requiere paréntesis en la cláusula FROM para las consultas que incluyen más de una unión. Pruébalo de esta manera ...

FROM ((tbl_employee INNER JOIN tbl_netpay ON tbl_employee.emp_id = tbl_netpay.emp_id) INNER JOIN tbl_gross ON tbl_employee.emp_id = tbl_gross.emp_ID) INNER JOIN tbl_tax ON tbl_employee.emp_id = tbl_tax.emp_ID;

Si es posible, use el diseñador de consultas de Access para configurar sus uniones. El diseñador agregará paréntesis según sea necesario para mantener feliz el motor de db.

Error de sintaxis (operador faltante) en la expresión de consulta ''tbl_employee.emp_id = tbl_netpay.emp_id INNER JOIN tbl_gross ON tbl_employee.emp_id = tbl_gross.emp_ID INNER JOIN tbl_tax ON tbl_employee.emp_id - tbl_tax.emp_ID''.

SELECT tbl_employee.emp_ID, tbl_employee.emp_name, tbl_gross.BasicSalary, tbl_gross.totalOT, tbl_netpay.totalGross, tbl_tax.totalLate, tbl_tax.allowance, tbl_tax.SSS, tbl_tax.PhilHealth, tbl_tax.GSIS, tbl_tax.HDMF, tbl_netpay.totalDeduc, tbl_netpay.emp_ti, tbl_netpay.emp_wt, tbl_netpay.emp_np FROM tbl_employee INNER JOIN tbl_netpay ON tbl_employee.emp_id = tbl_netpay.emp_id INNER JOIN tbl_gross ON tbl_employee.emp_id = tbl_gross.emp_ID INNER JOIN tbl_tax ON tbl_employee.emp_id = tbl_tax.emp_ID;

Siempre recibo el error anterior.


Gracias HansUp por tu respuesta, es muy útil y funciona!

Encontré tres patrones trabajando en Access, el tuyo es el mejor, porque funciona en todos los casos.

  • INNER JOIN, tu variante. Lo llamaré " patrón de conjunto cerrado ". Es posible unir más de dos tablas a la misma tabla con un buen rendimiento solo con este patrón.

    SELECT C_Name, cr.P_FirstName+" "+cr.P_SurName AS ClassRepresentativ, cr2.P_FirstName+" "+cr2.P_SurName AS ClassRepresentativ2nd FROM ((class INNER JOIN person AS cr ON class.C_P_ClassRep=cr.P_Nr ) INNER JOIN person AS cr2 ON class.C_P_ClassRep2nd=cr2.P_Nr )

    ;

  • INNER JOIN " patrón encadenado "

    SELECT C_Name, cr.P_FirstName+" "+cr.P_SurName AS ClassRepresentativ, cr2.P_FirstName+" "+cr2.P_SurName AS ClassRepresentativ2nd FROM person AS cr INNER JOIN ( class INNER JOIN ( person AS cr2 ) ON class.C_P_ClassRep2nd=cr2.P_Nr ) ON class.C_P_ClassRep=cr.P_Nr ;

  • CROSS ÚNASE con WHERE

    SELECT C_Name, cr.P_FirstName+" "+cr.P_SurName AS ClassRepresentativ, cr2.P_FirstName+" "+cr2.P_SurName AS ClassRepresentativ2nd FROM class, person AS cr, person AS cr2 WHERE class.C_P_ClassRep=cr.P_Nr AND class.C_P_ClassRep2nd=cr2.P_Nr ;