web-dev-qa-db-fra.com

Access-SQL: Jointure interne avec plusieurs tables

j'ai plusieurs tables dans une base de données:

tblOjt

ID    studentid    courseid    companyid    addresseeid    dateadded    datestarted    dateended    ojthours

1         3            1           1             1         9/25/2013                                  500 

tblStudent

ID    lastname    firstname    middlename    course    gender    renderedhours    dateadded    archive

3     Dela Cruz      Juan        Santos       BSIT      Male          500

tblCourse

ID    coursealias    coursename                                            hours
1         BSIT      Bachelor of Science in Information Technology          500

tblCompany

ID    companyname

1      MyCompany

tbl Destinataire

ID    addresseename

1     John dela Cruz

j'ai besoin d'une déclaration SQL dans laquelle je peux obtenir ces valeurs:

tableOjt.id  tableOJT.surname,firstname, and middlename  course  companyname  addresseename dateadded datestarted dateended ojthours

comment vais-je obtenir ce code dans SQL en utilisant ces méthodes de jointure ... im l'écrivant en VB6 ADODC, est-ce la même syntaxe dans un SQL standard? Merci

13
Kay Singian

Si vous écrivez une requête sur un backend de base de données Access, vous devez utiliser la syntaxe de jointure suivante:

select
  t1.c1
, t2.c2
, t3.c3
, t4.c4
from ((t1
inner join t2 on t1.something = t2.something)
inner join t3 on t2.something = t3.something)
inner join t4 on t3.something = t4.something

Les noms de table et de colonne ne sont pas importants ici, mais l'emplacement des parenthèses l'est. En principe, vous devez avoir n - 2 des parenthèses de gauche après la clause from et une parenthèse de droite avant le début de chaque nouvelle clause join, à l'exception de la première, où n est le nombre de tables jointes .

La raison en est que la syntaxe de jointure d'Access permet la jonction de deux tables à la fois. Par conséquent, si vous devez en joindre plus de deux, vous devez placer celles qui restent entre parenthèses.

57
Yawar
SELECT tblOjt.id, tblStudent.firstname, tblStudent.middlename, 
       tblStudent.lastname, tblStudent.course, tblCompany.companyname, 
       tblAddressee.addressee 
FROM (((tblOjt 
     INNER JOIN tblStudent ON tblOjt.studentid = tblStudent.id) 
     INNER JOIN tblCourse ON tblOjt.courseid = tblCourse.id) 
     INNER JOIN tblCompany ON tblOjt.companyid = tblCompany.id) 
     INNER JOIN tblAddressee ON tblOjt.addresseeid = tbladdressee.id

trouvé grâce à l'approche de Yawar ...

2
Kay Singian

été en train d’exécuter ce SQL avec VBA mais pas avec DoCmd.RunQuery J'ai essayé le SQL et ça marche bien. 

str = "SELECT tbl_company.[Company], tbl_company.[Commodity], tbl_company.[Segment], tbl_company.[MainProduct]," & _
      " tbl_financials.[DataYear]," & _
      " mstr_financial.[FinancialData]," & _
      " tbl_financials.[Amount]," & _
      " tbl_financials.[Unit]," & _
      " tbl_company.[CompanyID]" & _
      " FROM (tbl_company" & _
      " INNER JOIN tbl_financials ON tbl_company.[CompanyID] = tbl_financials.[CompanyID])" & _
      " INNER JOIN mstr_financial ON tbl_financials.[FinID] = mstr_financial.[FinID] " & _
      " ORDER BY tbl_company.[Company], tbl_financials.[DataYear] DESC"
0
Angelo Viray