web-dev-qa-db-ja.com

Access-SQL:複数のテーブルとの内部結合

データベースに複数のテーブルがあります:

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

tblAddressee

ID    addresseename

1     John dela Cruz

この値を取得できるSQLステートメントが必要です。

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

これらの結合メソッドを使用してSQLでこのコードを取得するにはどうすればいいですか?VB6 ADODCでそれを書いていますが、これは標準SQLの同じ構文ですか?ありがとう

13
Kay Singian

Accessデータベースバックエンドに対してクエリを作成する場合は、次の結合構文を使用する必要があります。

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

ここではテーブルと列の名前は重要ではありませんが、括弧の配置は重要です。基本的に、from句の後のn-2左括弧と、最初の場合を除き、新しいjoin句の開始前の1つの右括弧が必要です。 nは、結合されるテーブルの数です。

その理由は、Accessの結合構文では一度に2つのテーブルのみを結合できるため、3つ以上のテーブルを結合する必要がある場合は、余分なテーブルをかっこで囲む必要があるためです。

59
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

yawarのアプローチのおかげで...

2
Kay Singian

vBAを使用してこのSQLを実行しようとしましたが、DoCmd.RunQueryを使用して実行しません。私はSQLを試しましたが、それは機能しています。

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