• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access 複数テーブルの合成方法 超初心者です)

Accessで複数テーブルの合成方法 - 超初心者のための解説

このQ&Aのポイント
  • Accessで複数のテーブルに異なるフィールドと同じフィールドが存在しています。複数のテーブルを一つにまとめる方法について詳しく解説します。
  • 番号、住所、好物、ランクという異なるフィールドを持つ複数のテーブルを統合する手法を説明します。Access初心者でも理解しやすく解説しています。
  • Accessを始めたばかりの方に向けて、複数テーブルの結合方法について解説します。番号、住所、好物、ランクを持つテーブルを統合する方法を具体的に説明しています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

すみません。Q1のSQLは SELECT 番号,住所 FROM テーブル1 UNION SELECT 番号,住所 FROM テーブル2; に修正し、それからのクエリのSQLは SELECT Q1.番号, Q1.住所, [テーブル1].好物, [テーブル2].[ランク] FROM (Q1 LEFT JOIN テーブル1 ON Q1.番号 = [テーブル1].番号) LEFT JOIN テーブル2 ON Q1.番号 = [テーブル2].番号 ORDER BY Q1.番号; に修正してください。 上記のようにクエリを二段に分けないでまとめると (Qx が上のQ1にあたります) SELECT Qx.番号, Qx.住所, [テーブル1].好物, [テーブル2].[ランク] FROM ( (SELECT 番号,住所 FROM テーブル1 UNION SELECT 番号,住所 FROM テーブル2 )AS Qx LEFT JOIN テーブル1 ON Qx.番号 = [テーブル1].番号) LEFT JOIN テーブル2 ON Qx.番号 = [テーブル2].番号 ORDER BY Qx.番号; のようにも出来ます。

HARDAccess
質問者

お礼

ありがとうございました。 できました。 SQLを理解できるようにこれから勉強がんばります。

その他の回答 (3)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

既に出ている回答にある通りですが、若干の説明をつけます。 SQLでは論理の組み立てが重要だからです。 (1)テーブル1の全体と、テーブル2の番号が対応するデータ  これだと、テーブル2だけにあるものが取り残されるので、 (2)テーブル2だけにあるデータ (3)(1)と(2)を繋げて、番号で並べ替える では順にやります。 (1) SELECT A.番号,A.住所,A.好物,B.ランク FROM テーブル1 AS A LEFT JOIN テーブル2 AS B ON A.番号 = B.番号 「テーブル1 AS A」 テーブル1にAという別名を割り当てます。 これはフィールドをテーブル名で修飾する時に簡便にする ためです。次の「テーブル2 AS B」も同じ意味です。 「A LEFT JOIN B」 Aが主で、Bが従となる組み合わせを 意味しています。BになくてもAにあれば抽出されます。 (2) SELECT A.番号,A.住所,NULL AS 好物,A.ランク FROM テーブル2 AS A LEFT JOIN テーブル1 AS B ON A.番号 = B.番号 WHERE B.番号 IS NULL 「NULL AS 好物」NULLは予約語で、空欄になります。 テーブル1」側が無いことが分かっているからです。 「WHERE B.番号 IS NULL」 B側が存在しないものだけを 抽出する条件句です。 (3) SELECT A.番号,A.住所,A.好物,B.ランク FROM テーブル1 AS A LEFT JOIN テーブル2 AS B ON A.番号 = B.番号 UNION ALL SELECT A.番号,A.住所,NULL AS 好物,A.ランク FROM テーブル2 AS A LEFT JOIN テーブル1 AS B ON A.番号 = B.番号 WHERE B.番号 IS NULL ORDER BY 1 「UNION ALL」 上のクエリと下のクエリを繋げます。 「ALL」をつけないと、全てのフィールドが同じ値の レコード群は1行しか出力されません。 「ALL」を付けると全ての行が出力されます。 UNIONクエリでは繋げるクエリの列の数と属性が 同じでなければなりません。 「ORDER BY 1」 UNIONクエリの場合のORDER句は フィールド名ではなく、1から始まる列の位置を指定 します。

HARDAccess
質問者

お礼

詳細まで説明して頂きありがとうございます。 今後の勉強の参考にさせていただきます。 ありがとうございました。

回答No.2

ユニオンクエリで番号のリストを作成します。 ユニオンクエリはデザインビューでは出来ないので SQLビューに切り替え、そこに SELECT 番号 FROM テーブル1 UNION SELECT 番号 FROM テーブル2; これをQ1として保存します。 このQ1とテーブル1・2を連結させて SQLビューなら SELECT Q1.番号, [テーブル1].住所, [テーブル1].好物, [テーブル2].[ランク] FROM (Q1 LEFT JOIN テーブル1 ON Q1.番号 = [テーブル1].番号) LEFT JOIN テーブル2 ON Q1.番号 = [テーブル2].番号 ORDER BY Q1.番号; となります。添付画像のSQL文です。 http://office.microsoft.com/ja-jp/access-help/HA010206109.aspx

この投稿のマルチメディアは削除されているためご覧いただけません。
HARDAccess
質問者

お礼

回答ありがとうございます。 ユニオンクエリですね?よくわかりませんでしたが、とりあえずコピペをしてみました。 結果、添付画像のようにできましたが、実行すると番号6~8の住所だけ表示されませんでした。 他になにか方法があるのでしょうか? 申し訳ございませんが、ご教示お願いします。

回答No.1

こんにちは 可能か不可能かであれば可能です。 非常に非効率では有りますが。 SQLを学ばれるのが最も手っ取り早いと思います。 URL添付させていただきます。

参考URL:
http://access-sql.seesaa.net/category/3001313-1.html
HARDAccess
質問者

お礼

早速の回答ありがとうございます。 非効率とはいえ可能である事に安心しました。 リンク先拝見しました。SQLですね?全くわかりませんでしたがいずれマスターするように頑張りたいと思います。 ありがとうございました。

関連するQ&A

専門家に質問してみよう