Accessで複数テーブルを結合する時に、書き方が分からず苦労しました。
他のサイトでも3テーブルの結合までは書いていたのですが、4つ以上の書き方がありませんでした。
備忘録として残しておきます。
実際に作ったファイルはこちらからダウンロードできます。
SQLの知識が必要なので、ゼロからはじめるデータベース操作がおすすめです。
Access SQLで2テーブルの結合
2つのテーブルを結合する場合の書き方です。
GoodsテーブルとRecipeテーブルを結合する場合を例にします。
抽出元
■Goodsテーブル
Goods_cd | Goods_name | price | calorry |
101004 | ビーフカツランチ | 880 | 0 |
■Recipeテーブル
goods_cd | food_cd | necessary_num |
101004 | 201110 | 5 |
101004 | 201111 | 5 |
101004 | 201112 | 10 |
101004 | 201114 | 30 |
101004 | 201115 | 5 |
101004 | 201116 | 10 |
101004 | 201124 | 50 |
101004 | 201143 | 5 |
101004 | 201145 | 120 |
101004 | 201146 | 5 |
101004 | 201147 | 50 |
SQL
1 2 3 4 5 6 7 8 9 10 11 12 |
SELECT Goods.Goods_cd ,Goods.Goods_name ,Goods.price ,Recipe.food_cd ,Recipe.necessary_num FROM Goods LEFT JOIN Recipe ON (Goods.Goods_cd = Recipe.goods_cd) WHERE Goods.Goods_cd = 101004 |
ポイントとしては、
LEFT JOIN Recipe ON (Goods.Goods_cd = Recipe.goods_cd)
のようにON以降を()で囲む必要があることです。
Access SQLで3テーブルの結合
3つのテーブルを結合する場合の書き方です。
先ほどのGoodsテーブルとRecipeテーブルに加えて、
Foodsテーブルを結合する場合を例にします。
抽出元
■Foodsテーブル
foods_cd | foods_name | supplier_cd |
201110 | 濃口しょうゆ | 301200 |
201111 | ウスターソース | 301200 |
201112 | 中濃ソース | 301200 |
201114 | サラダ油 | 301107 |
201115 | ゴマ油 | 301107 |
201116 | ラード | 301106 |
201124 | 冷凍ほうれん草 | 301103 |
201143 | パセリ | 301103 |
201145 | 牛ロース肉 | 301108 |
201146 | トマトケチャップ | 301200 |
201147 | ナチュラルポテト | 301103 |
SQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
SELECT Goods.Goods_cd ,Goods.Goods_name ,Goods.price ,Recipe.food_cd ,Foods.foods_name ,Foods.supplier_cd FROM (Goods LEFT JOIN Recipe ON (Goods.Goods_cd = Recipe.goods_cd)) LEFT JOIN Foods ON (Recipe.food_cd = Foods.foods_cd) WHERE Goods.Goods_cd = 101004 |
ポイントはFROM直後~一つ目のJOINが終わるところまでを()で囲むところです。
FROM (Goods
LEFT JOIN Recipe
ON (Goods.Goods_cd = Recipe.goods_cd))
Access SQLで4テーブルの結合
3つのテーブルを結合する場合の書き方です。
先ほどのGoodsテーブル、Recipeテーブル、Foodsテーブルに加えて、
Supplierテーブルを結合する場合を例にします。
抽出元
■Supplierテーブル
supplier_cd | supplier_name |
301103 | ライヘルフ |
301106 | 流通パートナーズ |
301107 | 全食 |
301108 | 大地 |
301200 | キッコーマン |
SQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
SELECT Goods.Goods_cd ,Goods.Goods_name ,Goods.price ,Recipe.food_cd ,Foods.foods_name ,Foods.supplier_cd ,Supplier.supplier_cd ,Supplier.supplier_name FROM ((Goods LEFT JOIN Recipe ON (Goods.Goods_cd = Recipe.goods_cd)) LEFT JOIN Foods ON (Recipe.food_cd = Foods.foods_cd)) LEFT JOIN Supplier ON (Foods.supplier_cd = Supplier.supplier_cd) WHERE Goods.Goods_cd = 101004 |
ポイントはFROM直後~二つ目のJOINが終わるところまでを()で囲むところです。
FROM ((Goods
LEFT JOIN Recipe
ON (Goods.Goods_cd = Recipe.goods_cd))
LEFT JOIN Foods
ON (Recipe.food_cd = Foods.foods_cd))
結合テーブルが増えた時の書き方パターン
結合するテーブル数が5、6、7…と増えても()で囲む数が増えていくだけです。
2,3,4テーブルはすべてテーブル単位の()に色付けして分かりやすくしています。
これを覚えておけば問題ありません。
・Access の SQL で 3つ以上の表を join する
https://qiita.com/Takashi_Noboru/items/f188eddb241d18896795
・【Access VBA】【SQL】 3つ以上の表を結合⇒LEFT JOIN
http://tibirobo.jpn.org/?p=91
・複数テーブルをつなげてレコードを結合する 《ユニオン クエリ》
https://www.helpforest.com/access/ob_query/ac050007.htm
■Excelマクロ
てっとり早く確実にマスターできる Excel VBAの教科書
■Accessマクロ
よくわかる Microsoft Access 2016 基礎
Accessのデータベースのツボとコツがわかる本2013対応