2014-01-05 3 views
27

Синтаксическая ошибка (отсутствующий оператор) в выражении запроса '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.Multiple INNER JOIN SQL Access

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; 

Я всегда получаю сообщение об ошибке выше.

ответ

64

Доступ требует скобок в предложении FROM для запросов, которые включают в себя более одного соединения. Попробуйте это так ...

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; 

Если возможно, используйте конструктор запросов доступа, чтобы настроить свои соединения. Дизайнер будет добавлять скобки по мере необходимости, чтобы поддерживать работоспособность db.

4

Спасибо HansUp за ваш ответ, это очень полезно, и оно работает!

Я нашел три шаблона, работающих в Access, ваш лучший, потому что он работает во всех случаях.

  • INNER JOIN, ваш вариант. Я назову его «закрытый шаблон набора». Можно подключить более двух таблиц к одной и той же таблице с хорошей производительностью только с этим шаблоном.

    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 "прикован набора шаблон"

    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 с тем, где

    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 
    ;