accessのテーブル2つを1つのテーブルにする方法を教えていただけないでしょうか。
《テーブルA》
氏名,住所,電話番号,・・・・
《テーブルA》
氏名,健康保険番号,雇用保険番号,・・・・

氏名は、テーブルAとテーブルBで一致しています。

とりあえず、1個のテーブルにしてしまいたいのですが。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

選択クエリーでできます。


テーブル表示で、テーブルAとBを表示させて「氏名」で結合させます。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
リレーションなども自動でガイドしてくれるんですね。
知りませんでした。 (^^;
おかげ様で簡単にできました。

お礼日時:2002/03/25 19:10

テーブルを作るの?


クエリーを作るの?

 何がしたいのか見えません。もう少し、やりたい事を明確にして下さい。

 単純にテーブルを作りたいのなら、両方のフィールドを全て並べてしまえば良いのでは?
 中のデータを含めてやりたいのなら、テーブル作成クエリーを作成すれば簡単に出来ます。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
実は、テーブルを作ったらいいものか、クエリーで足りるものかも判断できないレベルで・・・。
とりあえず、アドバイスのテーブル作成クエリを使ってテーブルも作れました。 (^^;

お礼日時:2002/03/25 19:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aと関連する良く見られている質問

QACCESS ACCESS VBA テーブル テーブル変換 番号 個数 変換

私はプログラム初心者です。
業務の中でACCESSを使っております。
ACCESSでテーブルの変換についてのプログラムが分からなかったので
質問させて頂きました。


以下のようなテーブル(テーブル1)があります。
管理番号|NO|名前
1|NO.1|スプーン
2|NO.2|スプーン
3|NO.3|スプーン
4|NO.1|フォーク
5|NO.2|フォーク
6|""|ナイフ
7|NO.1|お鍋
以上のテーブルを新たにテーブル(テーブル2)を作成し、次のようなにしたいです。
管理番号|台数|名前
1|3|スプーン
4|2|フォーク
6|1|ナイフ
7|1|お鍋

テーブル変換の機能
・名前が同じ物の個数を表示する
・名前が同じ物の管理番号は若い番号にする

よろしくお願いいたします。

Aベストアンサー

Access2003でのクエリ作成手順になります。(他バージョンでもほぼ同じでしょう)

・「デザインビューでクエリを作成する」から対象のテーブルを表示させます。

・クエリデザインツールバーにある「Σ」をクリックします。
 (デザインの欄に「集計」が追加されます)

 もしくは、クエリの種類を1度「クロス集計」にし、「選択」に戻しても同じ状態になります。

・テーブル内の「管理番号」をダブルクリックします。
 フィールドに「管理番号」、テーブルに対象テーブル名、集計に「グループ化」が表示されます。
 集計のところを「最小」に変更します。
 並べ替えのところを「昇順」に変更します。

・テーブル内の「NO」をダブルクリックします。
 フィールドに「NO」、テーブルに対象テーブル名、集計に「グループ化」が表示されます。
 集計のところを「カウント」に変更します。

・テーブル内の「名前」をダブルクリックします。
 フィールドに「名前」、テーブルに対象テーブル名、集計に「グループ化」が表示されます。

・ここで、表示を「データシートビュー」に切り替えます。(注1)
 管理番号の最小、NOのカウント、名前 の表が表示されます。
 名前「ナイフ」部分のカウントが得たいものではなく「0」になっています。
 これは、NULLのデータはカウント対象外となっているためです。

・表示を「SQLビュー」に切り替えます。
 1行目中ほどに 「 Count(テーブル名.[NO]) AS NOのカウント, 」があります。
 NOに限定した個数を求めるのでなく、単にレコード数を得たいので
 これを 「 Count(*) AS 台数, 」に書き換えます。
 XXXXX AS YYYY は、XXXXXをYYYY名で、という意味合いになるので、
 同様に「管理番号の最小」->「管理番号」に修正します。

・表示を「データシートビュー」に切り替えます。

これで求めたいクエリは作成することができました。
このクエリをそのまま使うのではなく、結果をテーブルに書き出すには続いて以下を行います。

・表示を「クエリ デザイン」に切り替えます。

・メニューの「クエリ」->「テーブル作成」をクリックします。
 テーブル名を入力し、「OK」

 クエリデザイン上変化はありませんが、以上で終了です。

確認)
表示を「SQLビュー」に切り替えます。
1行目最後あたりに、「 INTO テーブル名 」が追加されています。
これが結果をテーブルに書き出す命令部分になります。


(注1)
「'*'で選択したフィールドはグループ化できません。」というメッセージが出たら、クエリ作成をいったんあきらめます。
(クエリデザインの画面を閉じます)
メニューの「ツール」->「オプション」の「テーブル/クエリ」タブの「クエリ デザイン」部分の「全てのフィールドを表示する」チェックを外し「OK」します。
クエリ作成を初めからやり直します。

(注2)
(注1)の変更は、以降も変更されたままとなるので、今回だけ回避するには、
表示を「SQLビュー」にし、1行目最後の「 テーブル名.名前, * 」の「 , * 」を削除します。


書く練習がてら、初心者向けに書いてみましたがいかがでしたでしょうか。

Access2003でのクエリ作成手順になります。(他バージョンでもほぼ同じでしょう)

・「デザインビューでクエリを作成する」から対象のテーブルを表示させます。

・クエリデザインツールバーにある「Σ」をクリックします。
 (デザインの欄に「集計」が追加されます)

 もしくは、クエリの種類を1度「クロス集計」にし、「選択」に戻しても同じ状態になります。

・テーブル内の「管理番号」をダブルクリックします。
 フィールドに「管理番号」、テーブルに対象テーブル名、集計に「グループ化」...続きを読む

Q2つのテーブルAとBをマージして新しいテーブルCを作成したいのです。

2つのテーブルAとBをマージして新しいテーブルCを作成したいのです。マージするときは、最新の売上日フィールドをもつレコードを取得します。環境はAccess2000です。どんなSQL文を作成すればいいのでしょうか? 
また、テーブルAにしかないレコード、又はテーブルBにしかないレコードは、そのままテーブルCに追加したいです。
※下記テーブルAとBは、Access内に存在します。テーブルCはAとBのマージ後の結果作成されるテーブルです。

テーブルA
顧客番号   売上日   商品名   備考
   1  2000-01-01  ふでばこ   A
   2  2000-02-02  鉛筆     A
   3  2000-03-03  定規     A
   4  2000-04-04  シャーペン  A
  99  2000-09-09  パソコン   A

テーブルB
顧客番号   売上日   商品名   備考
   4  2001-04-04  シャーペン  B
   2  2000-02-02  鉛筆     B
   3  2001-03-03  定規     B
   1  1999-01-01  ふでばこ   B
 100  2005-11-11  ワープロ   B


テーブルAとBを、最新の売上日の条件でレコードを取得し新しいテーブルCを作成する。

テーブルC
顧客番号   売上日   商品名   備考
   1  2000-01-01  ふでばこ   A
   2  2000-02-02  鉛筆     A
   3  2001-03-03  定規     B
   4  2000-04-04  シャーペン  A
  99  2000-09-09  パソコン   A
 100  2005-11-11  ワープロ   B

SQL文で処理可能なのでしょうか?

2つのテーブルAとBをマージして新しいテーブルCを作成したいのです。マージするときは、最新の売上日フィールドをもつレコードを取得します。環境はAccess2000です。どんなSQL文を作成すればいいのでしょうか? 
また、テーブルAにしかないレコード、又はテーブルBにしかないレコードは、そのままテーブルCに追加したいです。
※下記テーブルAとBは、Access内に存在します。テーブルCはAとBのマージ後の結果作成されるテーブルです。

テーブルA
顧客番号   売上日   ...続きを読む

Aベストアンサー

サブクエリでネストしても出来ない処理があるのでクエリを分けた方が簡単ですよ。
単純にするなら3つ

'qry1として
SELECT テーブルA.顧客番号, テーブルA.売上日, テーブルA.商品名, テーブルA.備考
FROM テーブルA
UNION SELECT テーブルB.顧客番号, テーブルB.売上日, テーブルB.商品名, テーブルB.備考
FROM テーブルB;

'qry2として
SELECT qry1.顧客番号, Max(qry1.売上日) AS 売上日の最大, qry1.商品名
FROM qry1
GROUP BY qry1.顧客番号, qry1.商品名;

'qry3として
'テーブルCを作成するなら
SELECT qry2.顧客番号, qry2.売上日の最大 AS 売上日, qry2.商品名, qry1.備考 INTO テーブルC
FROM qry2 INNER JOIN qry1 ON (qry2.売上日の最大 = qry1.売上日) AND (qry2.顧客番号 = qry1.顧客番号)
GROUP BY qry2.顧客番号, qry2.売上日の最大, qry2.商品名, qry1.備考;

'既存のテーブルCに追加するならこちらで
INSERT INTO テーブルC ( 顧客番号, 売上日, 商品名, 備考 )
SELECT qry2.顧客番号, qry2.売上日の最大, qry2.商品名, qry1.備考
FROM qry2 INNER JOIN qry1 ON (qry2.売上日の最大 = qry1.売上日) AND (qry2.顧客番号 = qry1.顧客番号)
GROUP BY qry2.顧客番号, qry2.売上日の最大, qry2.商品名, qry1.備考;

サブクエリで処理できるところもありますがその辺はご自分でネストしてみてください。

サブクエリでネストしても出来ない処理があるのでクエリを分けた方が簡単ですよ。
単純にするなら3つ

'qry1として
SELECT テーブルA.顧客番号, テーブルA.売上日, テーブルA.商品名, テーブルA.備考
FROM テーブルA
UNION SELECT テーブルB.顧客番号, テーブルB.売上日, テーブルB.商品名, テーブルB.備考
FROM テーブルB;

'qry2として
SELECT qry1.顧客番号, Max(qry1.売上日) AS 売上日の最大, qry1.商品名
FROM qry1
GROUP BY qry1.顧客番号, qry1.商品名;

'qry3として
'テーブルCを作成す...続きを読む

QMs Access テーブルBにテーブルAのCDを充てたい。(クエリ?紐づけ?リレーションシップ?)

初心者です。よろしくお願いします。
そもそも、できるのかどうか、できたとして、どうするのかがわからないです。

次の2つのテーブルがあります。
テーブルマスタA には、①市町村CD ②市町村名 ③住所(番地なし)
テーブル受付データB には、①NO ②住所(番地まであり)③受付日 ④⑤・・・

具体的には、以下のとおり。(サンプル)
テーブルマスタA
①    ②      ③
10000  松戸市    千葉県松戸市
20000  鎌ケ谷市本町 千葉県鎌ケ谷市本町
30000  横須賀市   神奈川県横須賀市
テーブル受付データB
①    ②
1    千葉県松戸市五香5-5-5    
2    千葉県鎌ケ谷市本町さくらがおか8-88-8 ひまわりアパート302
3    神奈川県横須賀市横須賀8-7-8   

テーブル受付データBにおいて、②の部分(市町名まで)と、
テーブルマスタAの③をなんとか紐づけて、

クエリで合体させたい。
=テーブル受付データBに、テーブルマスタAの市町村CDを充てたい。
A①市町村CD  A②市町村名 B② B③ B④ B⑤
とすることを切望しています。

***********
たとえば、2つのテーブルに同じフィールドがあって、
それをリレーションシップで紐づけるのは容易ですが、
今回のようなパターンは、
もしかして、私は、ナンセンスなことをしようと苦闘している?と思ってきました。
フィールド名が同じじゃないのに、それを紐づけることができるのでしょうか?

できるとして、どのようにすればよいのでしょうか?

どうぞ、教えていただきたく、お願いいたします!!!

初心者です。よろしくお願いします。
そもそも、できるのかどうか、できたとして、どうするのかがわからないです。

次の2つのテーブルがあります。
テーブルマスタA には、①市町村CD ②市町村名 ③住所(番地なし)
テーブル受付データB には、①NO ②住所(番地まであり)③受付日 ④⑤・・・

具体的には、以下のとおり。(サンプル)
テーブルマスタA
①    ②      ③
10000  松戸市    千葉県松戸市
20000  鎌ケ谷市本町 千葉県鎌ケ谷市本町
30000  横須賀市   神奈川県横...続きを読む

Aベストアンサー

パラメータが表示されたのは指定したフィールドがないからです。
テーブル名とフィールド名を使用している名前に変更してください。

InStr関数は
ある文字列 (string1) の中から指定された文字列 (string2) を検索し、最初に見つかった文字位置を返す文字列処理関数です。
InStr(string1, string2)

やっていることはテーブル受付データBの②(住所)の中からテーブルマスタAの③(住所)を検索し
文字列がある位置を出しています。
必要なのは文字列が含まれているデータのみなので条件を>0としています。

試しにInStrの部分をなくしてクエリを実行してみてください。
「テーブルマスタA」のレコード数*「テーブル受付データB」のレコード数のデータが表示されるはずです。

QSQlite 2つのテーブル データ一致を抽出

PHP4.xx と SQLite2 初心者です。

会員向けのメルマガ配信プログラムを構築しています。

配信リストのテーブルと
配信停止リストのテーブルの「メールアドレス」のカラムにあるデータを照らし合わせて一致する情報を抽出したいのですがどうしたら言いかわかりません…

具体的には・・・

ある会員が配信停止を希望し、配信停止フォームから自分のメールアドレスの送信します。
すると配信停止テーブルにメールアドレスが登録される構造になっています。

送信する際は毎回CSVファイルを読み込んで配信先リストを作成して、数百人に送信するのですが、その際に読み込んだ数百件のデータのメールアドレスの部分を配信停止テーブルに登録されているメールアドレスのデータを照らし合わせて、一致した行を読み込まないようにしたいのです。
(そうしないとまたうっかり送ってしまう可能性があるので。)

どうぞよろしくお願いします。

Aベストアンサー

SQLite2について詳しくなく、SQLの実装状況も十分に把握していません。また、CSVファイルとSQLで操作したいというテーブルの関連、対応付けができるキーは「メールアドレス」だけなのかといったことも不明ですが、差分を求めるSQL例でいいなら、SQLite3では実装済のSQLを、いくつか提示しておきます。


(1)existsを使った例
select * from "配信リスト" as x
where not exists (select 1 from "配信停止リスト"
where x."メールアドレス"="メールアドレス")
;

(2)inでサブクエリを使った例
select * from "配信リスト"
where "メールアドレス" not in(select "メールアドレス" from "配信停止リスト")
;

(3)outer joinを使った例
select * from "配信リスト" as x
left join "配信停止リスト" as y
on x."メールアドレス"=y."メールアドレス"
where y."メールアドレス" is null
;

(4)exceptを使った例
select "メールアドレス" from "配信リスト"
except
select "メールアドレス" from "配信停止リスト"
;

SQLite2について詳しくなく、SQLの実装状況も十分に把握していません。また、CSVファイルとSQLで操作したいというテーブルの関連、対応付けができるキーは「メールアドレス」だけなのかといったことも不明ですが、差分を求めるSQL例でいいなら、SQLite3では実装済のSQLを、いくつか提示しておきます。


(1)existsを使った例
select * from "配信リスト" as x
where not exists (select 1 from "配信停止リスト"
where x."メールアドレス"="メールアドレス")
;

(2)inでサブクエリ...続きを読む

QACCESSで2つのテーブル比較で一致データのみ抽出したい

ACCESS初心者です。
2つのテーブルのあるフィールドを比較して、
両方のフィールドに存在するデータであれば、それを抽出する
といったことをしたいのですが、どなたか手法を教えて下さい。
よろしくお願いします。

Aベストアンサー

No.2・No.4です。

> 少し勉強のお付き合いをしていただいて良いでしょうか?

はい。
ではまず、前回作成して戴いたクエリを、それぞれ以下のように変更して下さい。
(SQL文はそれぞれ全文のコピー&ペースト(上書き)でOKです);

※「テーブル1→テーブル2」型 ; クエリ名=クエリA
SELECT DISTINCT テーブル1.データ1, "テーブル1" AS 由来
FROM テーブル1 LEFT JOIN テーブル2 ON テーブル1.データ1 = テーブル2.データ2
WHERE (((テーブル2.データ2) Is Null))
ORDER BY テーブル1.データ1;

※「テーブル1←テーブル2」型 ; クエリ名=クエリB
SELECT DISTINCT テーブル2.データ2, "テーブル2" AS 由来
FROM テーブル1 RIGHT JOIN テーブル2 ON テーブル1.データ1 = テーブル2.データ2
WHERE (((テーブル1.データ1) Is Null))
ORDER BY テーブル2.データ2;

<変更の概略と理由の説明>
・(1行目) Distinct
 →重複分を非表示(なくても可)
・(1行目) "テーブル○" As 由来
 →各データがどのテーブルにあったかがわかるようにするために追加
  (不要なら『SELECT DISTINCT テーブル○.データ○』に変更して下さい)
・(4行目) 非表示列での並べ替え指定を解除
 →「表示」のチェックと同様、全て「Null」なので不要
  (重複分を非表示にしようとした場合には、エラーの原因にもなります)


・・・以上で準備は終わりです。
「AとBどちらかだけ」のデータを1つにまとめて表示するためのSQL文は、以下のように
なります;
Select クエリA.データ1 As 表示列,クエリA.由来 From クエリA
UNION
Select クエリB.データ2 As 表示列,クエリB.由来 From クエリB;

 *このタイプのクエリ(ユニオンクエリといいます)は、デザインビューへの切替はできません。


「As 表示列」というのは、データ1・データ2を同一列として表示する際の名前の指定
です(指定しなくても同一列に扱われる場合もありますが、フィールド名が異なる場合は
こうして宣言してやった方が無難)。
 *クエリA・Bで「由来」を削除した場合、こちらの「,クエリ○.由来」も削除して下さい。


ちなみに上の文だと、元のテーブルやクエリの重複データは非表示(=1データに集約)です。
もし、重複分をそのまま表示したい場合は、元のクエリ(今回の例ではクエリA・クエリB)
の「DISTINCT(固有の値=はい)」の指定を解除した上で、

Select クエリA.データ1 As 表示列,クエリA.由来 From クエリA
UNION All
Select クエリB.データ2 As 表示列,クエリB.由来 From クエリB;

と、「Union」の後に「All」を追加すればOKです。
(どんなときに必要になるのかは私もわかっていないんですが・・・一応、参考までに)

No.2・No.4です。

> 少し勉強のお付き合いをしていただいて良いでしょうか?

はい。
ではまず、前回作成して戴いたクエリを、それぞれ以下のように変更して下さい。
(SQL文はそれぞれ全文のコピー&ペースト(上書き)でOKです);

※「テーブル1→テーブル2」型 ; クエリ名=クエリA
SELECT DISTINCT テーブル1.データ1, "テーブル1" AS 由来
FROM テーブル1 LEFT JOIN テーブル2 ON テーブル1.データ1 = テーブル2.データ2
WHERE (((テーブル2.データ2) Is Null))
ORDER BY テーブル1.データ1;

...続きを読む


人気Q&Aランキング

おすすめ情報