人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

AccessでのSQLについて教えてください。同一フォルダ上に3つのmdbがあります。
・MDB1(フォーム用)
・MDB2(テーブル2が存在する)
・MDB3(テーブル3が存在する)

テーブル2にはID,Address
テーブル3にはID,Name
とあります。これを外部結合したいと思っています。キーはIDです。どのように文を組み立てればよいでしょうか?

●質問者: akaired
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:access MDB MDB2 name SQL
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● Mook
●23ポイント

異なるファイルにあるテーブルを結合するには、リンクテーブルを利用するのがよいと思います。

http://www.serpress.co.jp/access/no001.html


外部結合に関しては目的に応じて、選択する必要がありますが

http://homepage2.nifty.com/mathpara/programing/access_fulljoin.h...

単純に名前への外部結合であれば、下記のようでどうでしょうか。

SELECT table3.id, table3.name, table2.address FROM table3
LEFT JOIN table2 ON table3.id = table2.id
ORDER BY table3.id
◎質問者からの返答

ご回答ありがとうございます!参考にさせて頂きます。


2 ● Im_Me
●23ポイント

MDB2のテーブル2、およびMDB3のテーブル3を参照して、

MDB1のフォーム(もしくはレポート)を表示/印字すると言う事でよかったでしょうか?(またはテーブルの更新)

MDB1でMDB2のテーブル2、およびMDB3のテーブル3をリンクして、SQLを作成、もしくはクエリを作成すれば良いかと思いますが…

SQL/クエリの構文はリンクテーブルもローカルテーブルも基本的に同じです。

◎質問者からの返答

ご回答ありがとうございます!参考にさせて頂きます。


3 ● kn1967
●22ポイント

データベース名.テーブル名 とすればアクセス可能になりますので

例えば下記のように記述します。

SELECT T1.*, T2.Address, T3.Name
FROM (テーブル1 AS T1
LEFT JOIN MDB2.テーブル2 AS T2 ON T2.ID = T1.AddressID)
LEFT JOIN MDB3.テーブル3 AS T3 ON T3.ID = T1.NameID
;
◎質問者からの返答

ご回答ありがとうございます!参考にさせて頂きます。


4 ● Mook
●22ポイント

とりあえず MDB1 のマクロで下記のようで他のファイルを参照できます。

(リンクテーブルを作成しているので、2回目以降はmakeRefTable をコメントアウトしてください。)

Sub main()
 makeRefTable  '初回のみ実行:2回実行するとエラーになります。
 joinSQL
End Sub

Sub makeRefTable()
 Dim myDB As DAO.Database
 Set myDB = CurrentDb
 
 Dim total As DAO.Recordset
 
 Dim objTBLDef2 As DAO.TableDef
 Set objTBLDef2 = CurrentDb.CreateTableDef("ref_table2")
 objTBLDef2.Connect = ";DATABASE=C:\mdb2.mdb"
 objTBLDef2.SourceTableName = "table2"
 myDB.TableDefs.Append objTBLDef2
 
 Dim objTBLDef3 As DAO.TableDef
 Set objTBLDef3 = CurrentDb.CreateTableDef("ref_table3")
 objTBLDef3.Connect = ";DATABASE=C:\mdb3.mdb"
 objTBLDef3.SourceTableName = "table3"
 myDB.TableDefs.Append objTBLDef3
End Sub

Sub joinSQL()
 Dim myDB As DAO.Database
 Set myDB = CurrentDb
 
 Dim sql As String
 sql = "SELECT ref_table3.id, ref_table3.name, ref_table2.address FROM ref_table3" _
 & " LEFT JOIN ref_table2 ON ref_table3.id = ref_table2.id" _
 & " ORDER BY ref_table3.id"
 
 Dim total As DAO.Recordset
 Set total = myDB.OpenRecordset(sql)

 Do Until total.EOF '--- B
 Debug.Print total!id & "/" & total!Name & "/" & total!Address
 total.MoveNext
 Loop
End Sub
◎質問者からの返答

ご回答ありがとうございます!参考にさせて頂きます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ