• ベストアンサー

アクセスのクエリについて教えてください。

アクセス初心者です。 AテーブルとBテーブルを合体したCテーブルを作成したいのですが、 クエリを使って1工程でできませんでしょうか。 レコードが1000を越えると大変な作業になりますので、 何か良い方法を探しております。宜しくお願いします。 Aテーブル 顧客No  名前  住所  1     鈴木  東京  2     田中  横浜 Bテーブル 顧客No  名前  電話  1     鈴木  03  3     山田  044 Cテーブル 顧客No  名前  住所  電話  1     鈴木  東京  03  2     田中  横浜  3     山田      044              以上

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.3

Aテーブル、Bテーブルにある「顧客No」「名前」の一覧を作ります。 SELECT 顧客No, 名前 FROM Aテーブル UNION SELECT 顧客No, 名前 FROM Bテーブル ; 上記内容をベースに、各テーブルの情報を拾っていきます。 (Aテーブル、Bテーブルに関して、一覧作成も一気にやると以下記述に) SELECT Q1.顧客No, Q1.名前, TA.住所, TB.電話 FROM ( (SELECT 顧客No, 名前 FROM Aテーブル UNION SELECT 顧客No, 名前 FROM Bテーブル) AS Q1 LEFT JOIN Aテーブル AS TA ON TA.顧客No = Q1.顧客No) LEFT JOIN Bテーブル AS TB ON TB.顧客No = Q1.顧客No ; この情報で Cテーブルを作成するのなら、1行目を以下に変更します。 SELECT Q1.顧客No, Q1.名前, TA.住所, TB.電話 INTO Cテーブル ・・・・ ・・・・ ※ここで書いたのは、クエリのSQLビューで記述します。 見当違いでしたらスルーしてください。

yabukitach
質問者

お礼

30246kiku様 ご回答ありがとうございます。 求めていたのはまさにこの内容です。 問題となっていたのは、No1の「鈴木」が両テーブルあっても、 重複したレコードにならないという点です。 ユニオンでは重複しないことを知りませんでした。 大変役に立ちました、ありがとうございます。

その他の回答 (2)

  • mission51
  • ベストアンサー率27% (3/11)
回答No.2

VBAはわかりますか?クエリでは思いつかないので。 全体のレコード数を入力すれば(1000件なら1000と入力するだけ)例題の内容は1クリックで完了です。 まずフォームを作成し、ボタンを一個配置してクリックイベントに下記コードを貼り付ける。 「メニューバー」の「ツール」「参照設定」からMicrosoft Active Data Objects 6.0 Libraryにチェックをいれる。 Dim CN As ADODB.Connection Dim RS As ADODB.Recordset Dim R_COUNT As Integer Dim i As Integer Dim SQL_NO1 As String Dim SQL_NO2 As String R_COUNT = InputBox("レコード数の入力") SQL_NO1 = "UPDATE A, C, B SET C.ID = [A].[ID], C.名前 = [A].[名前], C.住所 = [A].[住所] WHERE (((C.ID)=[A].[ID]))" SQL_NO2 = "UPDATE A, C, B SET C.名前 = [B].[名前], C.電話 = [B].[電話] WHERE (((C.ID)=[B].[ID]))" For i = 1 To R_COUNT Set CN = CurrentProject.Connection Set RS = New ADODB.Recordset RS.Open "C", CN, adOpenKeyset, adLockOptimistic 'Cテーブルを編集対象にする RS.AddNew RS!ID = i 'IDフィールドに連番で「レコード数」分レコード追加 RS.Update RS.Close: Set RS = Nothing Next i DoCmd.SetWarnings False 'クエリの実行時のメッセージを表示しない DoCmd.RunSQL SQL_NO1 'SQL_NO1クエリの実行 DoCmd.RunSQL SQL_NO2 'SQL_NO2クエリの実行 DoCmd.SetWarnings True '「クエリの実行時のメッセージを表示しない」を元に戻す CN.Close: Set CN = Nothing MsgBox R_COUNT & "件追加しました"

yabukitach
質問者

お礼

ご回答ありがとうございます。 いろいろご検討いただきましたが、VBAはクエリ以上に分かりません。 「クエリ」では思いつかないというのは、ありがたい情報です。 手作業でこつこつやるしかないようですね。 例題の書き方で誤解されているかもしれませんが、 実際の「顧客No」は連続した数値ではありませんので、 クエリを使ってテーブルを手作業で合体させています。

  • mission51
  • ベストアンサー率27% (3/11)
回答No.1

[顧客No]が主キーだと仮定します。 1、Cテーブルの[顧客No]に1から3まで番号を振る。 2、Aテーブルの[名前]と[住所]をCテーブルの[顧客No]の各レコードに更新クエリで追加する。 UPDATE A, C, B SET C.ID = [A].[ID], C.名前 = [A].[名前], C.住所 = [A].[住所] WHERE (((C.ID)=[A].[ID])); 3、Bテーブルの[名前]と[電話]をCテーブルの[顧客No]の各レコードに更新クエリで追加する。 UPDATE A, C, B SET C.名前 = [B].[名前], C.電話 = [B].[電話] WHERE (((C.ID)=[B].[ID]));   以上で例題の内容となりますが・・・。これではダメでしょうかね。   

yabukitach
質問者

補足

mission51さん、ご回答ありがとうございます。 実は一番悩んでいるのが >1、Cテーブルの[顧客No]に1から3まで番号を振る。 ところなのです。 1000以上のレコードからなるAテーブルとBテーブルですので、 手作業ではとても無理で、AとBを比較し一致顧客Noと不一致顧客Noを 合体させて、Cテーブルの顧客Noフィールドを生成しています。 このようなテーブルが実際は10数個ありますので、 1、の作業とそれ以降の作業を合体させて1工程でできないかと悩んでいる次第です。

関連するQ&A

  • Access2000のクエリ、教えてください。

    データが 名前 NO 大学 -------------------------------- 田中 8 北海道大学 すずき 1 大宮大学 田中 3 青森大学 田中 2 千葉大学 すずき 3 湘南大学 すずき 4 山梨大学 すずき 2 東京大学 で、検索条件、名前の最大NO で 名前、 NO、大学 をリストアップ したい。 ●ほしい結果 すずき 4 山梨大学 田中 8 北海道大学 ですが、 クエリーのSQLです。 --------------------------- SELECT テーブル1.名前, Max(テーブル1.[No]) AS Noの最大, Max(テーブル1.大学) AS 大学の最大 FROM テーブル1 GROUP BY テーブル1.名前; ●現在の結果 すずき 4 東京大学 田中 8 北海道大学 となってしまいます。 SQLをどのように変えればいいのでしょうか? アドバイスをお待ちしています。

  • アクセスの違うファイルデータをひとつのテーブルにしたい

    アクセス初心者です。 今回仕事でデータを分析することになったのですが、わからないので教えて頂きたいです。 あるデータをアクセス移行し、Aファイル Bファイルのアクセスファイルを作りました。 Aファイルのテーブル 商品NO  枝NO   出荷年月  店  商品 123    01    2007.08   東京  A 345    01    2007.08   大阪  A 567    02    2007.08   東京  B Bファイルのテーブル 商品NO+枝NO   店   担当者 12301       東京   山田 34501       大阪   鈴木 56702       東京   佐藤 C(作りたいテーブル) 商品NO  枝NO   出荷年月  店  商品  担当者 123     01   2007.08  東京  A   山田 345     01   2007.08  大阪  A   鈴木 567     02   2007.08  東京  B   佐藤 *Bの担当者項目をAに加えたい もしくは D(作りたいテーブル) 商品NO+枝NO   店   担当者 出荷年月   商品 12301       東京   山田  2007.08    A 34501       大阪   鈴木  2007.08    A 56702       東京   佐藤  2007.08    B *Aの出荷年月 商品をBに加えたい 私は AファイルにBファイルをリンクさせました。 その後、AとBのテーブルをリレーションシップしようと思いましたが、 KEYにしようと思った商品NOが Aでは 商品NO と 枝NOでわかれていたためわからなくなってしまいました。 CもしくはDを作る方法はあるのでしょうか? 他の社員がまったくアクセスを利用していない人なので、困っています。 長くなってすいません。

  • Accessでテーブルの内容を抽出したい

    お世話になります。 Access2000で作成しております。 下記のテーブルAがあります。 名前1とタイム1,名前2とタイム2をセットにして、 テーブルBを作成したいのですが、 どのようにすれば作成できるでしょうか? 可能でしたら、「クエリ」で、説明難しければ「SQL」で 教えていただければと思います。 ※SQLの場合は、クエリに変換して使用します。 ----テーブルA---- 番号 名前1 名前2 名前3 タイム1 タイム2 タイム3 1 山田 田中  佐藤 10 8 9 2 鈴木 木村  戸田 7  8 9 ----テーブルB------ 名前 タイム 山田 10 田中  8 佐藤 9 鈴木 7 ・ ・ -------------------- お手数ですがよろしくお願いいたします。

  • アクセス クエリーの作成

    OS:98 Access Version:97 下記のようなレコードの抽出をしたいのですが、どのようにすれば できるのか教えてください。 <テーブル1> 顧客番号 氏名   学年 曜日 時間 科目 111111 田中一郎 中1 月  A1 国語 222222 鈴木太郎 中2 水  B3 算数 111111 田中一郎 中1 月  A2 理科 222222 鈴木太郎 中2 金  B3 社会 <クエリ1> 顧客番号 氏名   学年 曜日1 時間1 科目1 曜日2 時間2 科目2 111111 田中一郎   中1 月  A1  国語  月   A2 理科 222222 鈴木太郎   中2 水  B3  算数  金   B3 社会 このようにしたいのですが、お知恵をお貸し下さい

  • 【Access2007】クエリを教えてください

    Access2007を使用しています。 以下のような3つのテーブルがあります。 テーブルA No    項目a 1     ○ 2     ○ 3     ○ 5     ○ テーブルB No    項目b 1     ○ 4     ○ 5     ○ テーブルC No    項目c 1     ○ 2     ○ 4     ○ 6     ○ これらの3つのテーブルから以下の結果を返すクエリはどうすればいいのでしょうか? No    項目A   項目B   項目C 1     ○     ○     ○ 2     ○            ○ 3     ○ 4            ○     ○ 5     ○     ○ 6                  ○

  • Accessでテーブルの内容を参照したい

    お世話になります。 Access2000で作成しております。 下記のテーブルAがあります。 名前1とタイム1,名前2とタイム2をセットにして、 Bの形で表示したいのですが、 どのようにすればできるでしょうか? 表現が下手で申し訳ないのですが、 テーブルを作るのではなく、既に存在しているテーブルAの 情報を「参照」して、Bの形で表記したいのです。 可能でしたら、「クエリ」で、説明難しければ「SQL」で 教えていただければと思います。 ※SQLの場合は、クエリに変換して使用します。 ----テーブルA---- 番号 名前1 名前2 名前3 タイム1 タイム2 タイム3 1 山田 田中  佐藤 10 8 9 2 鈴木 木村  戸田 7  8 9 ----B------ 名前 タイム 山田 10 田中  8 佐藤 9 鈴木 7 ・ ・ -------------------- お手数ですがよろしくお願いいたします。

  • 難しいクエリなので教えてください。

    データベース:MYSQLのバージョン4です。 1ヶ月予約していない人を抽出せよ、というクエリです。 テーブルは 顧客テーブル(t_customer)と予約テーブル(t_yoyaku)です。 顧客テーブルのカラムは、顧客番号(no)、氏名(name)です。 予約テーブルのカラムは、顧客番号(no)と予約日付(day)です。 以下のようにレコードが登録されています。 顧客テーブル 顧客番号 氏名 1  鈴木太郎 2  佐藤一朗 3  高橋次郎 4  山田五郎 予約テーブル 顧客番号 予約日付 1  2008-4-10 1  2008-5-11 1  2008-6-12 1  2008-7-10 2  2008-5-12 2  2008-6-10 3  2008-6-11 3  2008-8-12 ※予約テーブルに登録されていない場合(山田五郎)も合わせて 抽出 すみませんが、上記のクエリについてどなたか 教えてください。お願いします。

    • ベストアンサー
    • MySQL
  • Accessの選択クエリの抽出条件について

    いちもお世話になります。Access2002を勉強中の初心者です。 顧客テーブルから選択クエリを作っています。クエリのフィールドには「都道府県」(東京、埼玉、千葉...)と「顧客名」(山田、佐藤、田中...)があります。 「顧客名」の山田以外を抽出したいのですが、但し「都道府県」が東京の場合は山田以外の条件を外したいのです。つまり、埼玉、千葉の山田は抽出しませんが東京の山田は抽出したいのです。 このような抽出条件の設定ができますか? アドバイス、よろしくお願いします。

  • アクセスのクエリーについて

    テーブルが2つあってクエリーを作成したいのですが、 <テーブル1> 氏名  項目1  項目2  項目3 山田  A    B    C というテーブルが1つあって、それぞれの項目1~3のフィールド のA~Cに対して <テーブル2> 項目コード   項目名 A       あいうえお B       かきくけこ C       さしすせそ というテーブルとリンクさせ 氏名  項目1     項目2     項目3 山田  あいうえお   かきくけこ   さしすせそ とあらわれるように作成したいのですが、それぞれ項目1~3に対して リンクさせたいのが、「テーブル2」を使用します。 この場合今は同じ内容で「テーブル2」を3つ作成してそれぞれでリンク させていますが、数が多くなりすぎると「リンクが複雑すぎます」とはねられます。「テーブル2」1つでリンクさせる方法はありますか?

  • テーブルの結合・・・

    教室テーブル id, class 1, A組 2, B組 3, C組 生徒テーブル id, name 1, 佐藤 1, 山田 2, 鈴木 3, 田中 3, 後藤 3, 加藤 という二つのテーブルがあります。 これらをLEFT JOINで結合したのですが。 A組, 佐藤 A組, 山田 B組, 鈴木 C組, 田中 C組, 後藤 C組, 加藤 となってしまいます。 これを同じ教室名でまとめて、 A組, 佐藤 山田 B組, 鈴木 C組, 田中 後藤 加藤 というように表示したいのです。 できればクエリだけで解決したいのですが・・・ よろしくお願いします。

    • ベストアンサー
    • MySQL