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.

34
demandé sur HansUp 2014-01-05 06:31:47

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.

75
répondu HansUp 2014-01-05 03:02:24

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
    ;
    
6
répondu michbau 2015-06-14 17:38:42