Múltiplo INNER JOIN SQL ACCESS

Erro de syntax (ausente do operador) na expressão 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; 

Eu sempre recebo o erro acima.

O access requer parênteses na cláusula FROM para consultas que incluem mais de uma associação. Tente assim …

 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; 

Se possível, use o designer de consulta do Access para configurar suas junções. O designer adicionará parênteses conforme necessário para manter o mecanismo de db feliz.

Obrigado HansUp pela sua resposta, é muito útil e funciona!

Eu encontrei três padrões trabalhando no Access, o seu é o melhor, porque funciona em todos os casos.

  • INNER JOIN, sua variante. Eu vou chamá-lo de ” padrão de conjunto fechado “. É possível juntar mais de duas tabelas à mesma tabela com bom desempenho apenas com esse padrão.

     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 ” padrão encadeado

     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 JOIN com ONDE

     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 ;