Accès multiple à la base de données SQL
erreur de syntaxe (opérateur manquant) dans l'expression de requête 'tbl_employee.emp_id = tbl_netpay.emp_id INNER JOIN TBL_GROSS ON tbl_employee.emp_id = tbl_gross.emp_ID internal 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;
j'obtiens toujours l'erreur ci-dessus.
2 réponses
L'accès nécessite des parenthèses dans le FROM
l'article pour les requêtes qui comprennent plus d'une jointure. Essayez de cette façon ...
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 possible, utilisez L'access query designer pour configurer vos jointures. Le concepteur ajoutera des parenthèses au besoin pour rendre le moteur db heureux.
Merci HansUp pour votre réponse, il est très utile et ça marche!!!
j'ai trouvé trois motifs qui fonctionnent dans Access, le vôtre est le meilleur, parce qu'il fonctionne dans tous les cas.
interior JOIN, votre variante. Je vais l'appeler "fermé modèle d'ensemble". Il est possible de joindre plus de deux tables à la même table avec de bonnes performances qu'avec ce modèle.
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 )
;
INTERIOR JOIN"enchaîné-set motif"
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 with 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 ;