- ベストアンサー
Accessで複数テーブルの合成方法 - 超初心者のための解説
- Accessで複数のテーブルに異なるフィールドと同じフィールドが存在しています。複数のテーブルを一つにまとめる方法について詳しく解説します。
- 番号、住所、好物、ランクという異なるフィールドを持つ複数のテーブルを統合する手法を説明します。Access初心者でも理解しやすく解説しています。
- Accessを始めたばかりの方に向けて、複数テーブルの結合方法について解説します。番号、住所、好物、ランクを持つテーブルを統合する方法を具体的に説明しています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
すみません。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.番号; のようにも出来ます。
その他の回答 (3)
- nda23
- ベストアンサー率54% (777/1415)
既に出ている回答にある通りですが、若干の説明をつけます。 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から始まる列の位置を指定 します。
お礼
詳細まで説明して頂きありがとうございます。 今後の勉強の参考にさせていただきます。 ありがとうございました。
- NotFound404
- ベストアンサー率70% (288/408)
ユニオンクエリで番号のリストを作成します。 ユニオンクエリはデザインビューでは出来ないので 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
お礼
回答ありがとうございます。 ユニオンクエリですね?よくわかりませんでしたが、とりあえずコピペをしてみました。 結果、添付画像のようにできましたが、実行すると番号6~8の住所だけ表示されませんでした。 他になにか方法があるのでしょうか? 申し訳ございませんが、ご教示お願いします。
- karasu1201
- ベストアンサー率22% (13/59)
こんにちは 可能か不可能かであれば可能です。 非常に非効率では有りますが。 SQLを学ばれるのが最も手っ取り早いと思います。 URL添付させていただきます。
お礼
早速の回答ありがとうございます。 非効率とはいえ可能である事に安心しました。 リンク先拝見しました。SQLですね?全くわかりませんでしたがいずれマスターするように頑張りたいと思います。 ありがとうございました。
お礼
ありがとうございました。 できました。 SQLを理解できるようにこれから勉強がんばります。