2013-10-14 37 views
14

に参加:アクセス-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で同じ構文ですか?おかげ

+1

あなたの質問のタイトルは現在「複数のデータベース」に言及していますが、質問テキストは「データベース内の複数のテーブル」について語ります。 1つのデータベースだけを扱っているかどうかを確認するために、あなたの質問を編集してください(http://stackoverflow.com/posts/19367565/edit)。 –

答えて

54

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 

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

なぜなら、Accessの結合構文は一度に2つのテーブルの結合をサポートするため、2つ以上のテーブルを結合する必要がある場合は、余分なものをかっこで囲む必要があるからです。

+0

こんにちは、私はあなたのアプローチを試みた:SELECT tblOjt.id、tblStudent.firstname、tblStudent.middlename、tblStudent.lastname、tblStudent.course、tblCompany.companyname、tbAddressee.addressee、tblOjt.dateadded、tblOjt.datestarted、tblOjt.dateestarted、tblOjt.dateended、tblOjt .ojthours FROM(tblOjt INNER JOIN tblStudent on tblOjt.studentid = tblStudent.id)INNER JOIN tblCompany on tblOjt.companyid = tblCompany.id)INNER JOIN tblAddressee on tblOjt.addresseeid = tblAddressee.id;しかし、私はSQLでそれを実行する場合、msAccessは、tblAddressee.addresseeにパラメータ値を入力するように私に尋ねる..私はそれを完全に働くことはできません.. –

+0

/tblAddressee.addresseename。それはmsAccessがパラメータvaleを入力するよう要求しているのです –

+1

私はtblAddressee.addresseenameを持っていません。私はtblAddressee.addresseeの情報を持っています:) –

1
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のアプローチのおかげで...

0

は、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" 
関連する問題