痔になりやすい生活習慣とは?

ACCESSで、以下のようにデータを追加をしたいです。
別々のテーブルで、データの一致しないものだけ追加したいです。
どのようにすればよいのでしょうか?
Aテーブル、Bテーブル共に入力項目は全て同じです。
よろしくお願いします。

 Aテーブル      Bテーブル
   名前 個人データ  名前 個人データ
  ・鈴木 ***     ・近藤 *** 
  ・近藤 ***     ・伊藤 ***
  ・渡辺 ***     ・鈴木 ***

求める答え

  ・鈴木 ***  
  ・近藤 *** 
  ・渡辺 ***
  ・伊藤 ***

たぶん、不一致クエリでBテーブルの伊藤さんだけ取り出して、Aテーブルに追加するという方法がやりやすいのでしょうか?
よろしくお願いします。

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

A 回答 (2件)

>不一致クエリでBテーブルの伊藤さんだけ取り出して、


>Aテーブルに追加するという方法がやりやすいのでしょうか?
考え方としてはこの方法でいいのですが
この方法でやるとたぶん名前が重複しているというエラーになります

上のようにして作ったクエリをSQLビューで表示したのが下です

INSERT INTO Aテーブル ( 名前, 個人データ, 名前 )
SELECT Bテーブル.名前, Bテーブル.個人データ, Aテーブル.名前
FROM Bテーブル LEFT JOIN Aテーブル ON Bテーブル.名前 = Aテーブル.名前
WHERE (((Aテーブル.名前) Is Null));

確かに抽出条件として使った名前まで記入されています
これがエラーの原因ですからこれを削除してやります

INSERT INTO Aテーブル ( 名前, 個人データ )
SELECT Bテーブル.名前, Bテーブル.個人データ
FROM Bテーブル LEFT JOIN Aテーブル ON Bテーブル.名前 = Aテーブル.名前
WHERE (((Aテーブル.名前) Is Null));
    • good
    • 1

クエリを3つ作成するのが一番簡単かと・・・。



1、クエリ1

SELECT * FROM A UNION SELECT * FROM B;

2、クエリ1とAとの差分

SELECT クエリ1.名前, クエリ1.個人データ
FROM クエリ1 LEFT JOIN A ON クエリ1.名前 = A.名前
WHERE (((A.名前) Is Null));

3、クエリ2

INSERT INTO A
SELECT *
FROM クエリ1とAとの差分;
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

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

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

Qアクセスのテーブルの差分の抽出について

アクセスの初心者です。今、仕事でデーターの差分の抽出の仕方についてわからず困っています。
2つのテーブルがあります。
テーブルには100以上の項目と500件ほどのレコードがそれぞれ入っています。
この2つのテーブルを比較して差分を出したいのですが方法が思いつきません。
出したいものは、テーブル1とテーブル2の共通のIDを比較し、
テーブル1からテーブル2で変更、追加されたものを出したいのです。
レコードの追加だけなら差分クエリを利用してやれると思うのですが、
100以上の全フィールドをそれぞれ比較するとなるとどうすれば良いのかわからないのです。
2つのテーブルの項目は基本一緒ですが、追加されたり、変更されたりします。

もともとはエクセルのデータで毎週やりとりされるもので、
エクセル上で手作業で、
シート1とシート2でマッチングを行い、シート3に追加、変更されたものを書き出しています。

100列ほどの項目も追加や変更されるので、前回データと今回データで
(1)列の比較をして2つの列数を揃えてから、
(2)KEYになる列でVLOOKUP関数を使い、追加されたデータをよけて、
(3)前回データと今回データが一緒のデーター並べ替え、揃えて、シートを比較して変更、追加を探す
という作業を行っています。

データー数が多く、エクセルでは限界がでてきました。
また、アクセスを使えば簡単にできる。と言われましたが、
まだまだ初心者のため、この大量のデータをどう処理すればいいのかわかりません。

質問は、
(1)アクセスで100項目以上あるテーブルのそれぞれの差分をだすことができるのでしょうか?
(2)その方法はどうすればよいのでしょうか?
また、アクセス初心者でも勉強すればすぐにできるのでしょうか?
と、いうことです。
会社に迷惑をかけないためにも、可能、不可能を判断したいです。
よろしくお願いいたします。

アクセスの初心者です。今、仕事でデーターの差分の抽出の仕方についてわからず困っています。
2つのテーブルがあります。
テーブルには100以上の項目と500件ほどのレコードがそれぞれ入っています。
この2つのテーブルを比較して差分を出したいのですが方法が思いつきません。
出したいものは、テーブル1とテーブル2の共通のIDを比較し、
テーブル1からテーブル2で変更、追加されたものを出したいのです。
レコードの追加だけなら差分クエリを利用してやれると思うのですが、
100以上の全フィールドをそ...続きを読む

Aベストアンサー

まず、テーブル1とテーブル2の全フィールドが合致するものを抽出するクエリを作成します。デザインビューで二つのテーブルの対応するフィールドを全て結合線で結べば良いですね。
クエリで出力するフィールドはテーブル2のフィールドのみとします。(テーブル1のみにしても、この場合は結果は同じだと思いますが)。これをクエリ1とします。
次にテーブル2と、クエリ1のIDについて不一致クエリを作成すれば、テーブル2の内で、テーブル1に無いものだけが抽出できると思いますがいかがでしょうか。(もし、テーブル1の内で、テーブル2に無いものを抽出したいのなら、適宜読み替えて同様に行って下さい)
ご参考まで。

QACCESS テーブルを見比べて、一致したレコードを抽出したいです

ACCESSで、以下のデータ抽出をしたいです。
別々のテーブルで、番号の一致したものだけ取り出したいです。
どのようにすればよいのでしょうか?
よろしくお願いします。

 Aテーブル     Bテーブル
  ・001 ***     ・002 *** 
  ・002 ***     ・004 ***
  ・003 ***     ・001 ***

求める答え

  ・001 ***  
  ・002 *** 

Aベストアンサー

> もう少しくだいて説明頂くとわかるのですが、
判ってしまえば簡単なんですが、言葉だけで説明するのは大変なんですよね。
「自動車の運転を、動作や絵を使わず文字だけで教えろ」と言われているようなものなので....
データベースを開き、
1.「クエリ」をクリック。
2.「新規作成」をクリック。
3.「デザインビュー」を選択して「OK」をクリック。
4.「テーブルの表示」から、「Aテーブル」をクリックし、さらに「CTRL」キーをおしたまま「Bテーブル」をクリックして、
 「Aテーブル」と「Bテーブル」が選択されている状態にして「追加」をクリック。
5.「閉じる」をクリックして「テーブルの表示」パネルを閉じる。
6.「Aテーブル」のコードの部分を「Bテーブル」のコード部分へドラッグする。
7.両テーブルのコード部分が線で結ばれていることを確認する。
8.「Aテーブル」の表示したいフィールドを、下の表にドラッグします。

このへんで、カンベンして下さい...

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

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

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Q【access】複数のフィールドの不一致クエリ

アクセスはまったくのド素人です。

OS:WindowsXP
バージョンは2000です。

A,Bのテーブルがあり、それぞれのレコードは以下の通りです。

A
a b c
1 4 7
2 5 8
3 6 9
5 6 8

  B 
d e f
5 6 8
1 4 7
2 1 3
4 4 6


d,e,fのフィールドがa,b,cと一致しないレコード(ここでは『2 12 13』と『2 1 3』)をクエリで抜き出したい時はどうすればよいでしょうか?

d,e,fに『Is Null』を指定して不一致クエリを実行しても思うように行きませんでした。

Aベストアンサー

A B それぞれのテーブルを元に比較用クエリをつくり
比較用のフィールドを創りましょう。

具体的には
a*100+b*10+c

として三桁の数値にします。

↓こんな感じ。
比較用クエリA(データソースはテーブルA)
a b c 比較A
1 4 7 147
2 5 8 258
3 6 9 369
5 6 8 568


これをBにも行い、

それぞれの比較用クエリの比較用フィールド(比較Aと比較Bの不一致を見る)で不一致クエリしてみて下さい。

それで出ると思います♪

QAccess 別テーブルにある値を抽出条件にしたい

OS:WindowsXP SP3
使用ソフト: Microsoft Access2003


選択クエリにて、別テーブルのフィールドにある値すべてを抽出条件にできますか?


ホームページに来て頂いた方の検索キーワードを集計しております。
テーブル1には『検索キーワード履歴』フィールドがあり、お客様が使用した検索キーワードが入力されています。(約2万件)
テーブル2には『除外キーワード候補』フィールドがあり、不要なキーワードが入力されています。(約10件)


クエリにて、『検索キーワード履歴』から『除外キーワード候補』の値を全て除いた結果を出力させたいのですが、
抽出条件をどのように指定したらいいのか分かりません。

そもそも、別テーブルのフィールドにある値すべてを除外させる抽出条件って指定できるのでしょうか。
SQLを用いる方法でも構いませんので教えてください。

Aベストアンサー

SELECT * FROM テーブル1
WHERE NOT EXISTS
(SELECT * FROM テーブル2 WHERE テーブル1.検索キーワード履歴 = テーブル2.除外キーワード候補)
OR 検索キーワード履歴 IS NOT NULL
とか
SELECT * FROM テーブル1
WHERE 検索キーワード履歴 NOT IN (SELECT 除外キーワード候補 FROM テーブル2 )
ということ?
1フィールドに1キーワードの場合です。

Q追加クエリで重複データなしで追加したい

テーブル:T_管理1、T_管理2

フィールド: F1、F2(T_管理1)
      ID、商品名(T_管理2)
      
      
となっています。


T_管理1は一時テーブルでレコードをT_管理2に放り込みます。
ただ、放り込む際にIDが重複しては困るのでそのチェック
をかけたいと思いますが、どこでかけるといいのでしょうか?

VBAでレコードセットをループさせ有無チェックをしてから
AddNewをするのであればわかるのですが、できればアクション
クエリで解決できればと思っています。


INSERT INTO T_管理2 ( ID, 商品名 )
SELECT F1, F2
FROM T_管理1
WHERE (((F1) Not In (SELECT ID FROM T_管理2)));

でどうかと思ったのですが、レコードは1件も抽出されませんでした。

Access2000

Aベストアンサー

INSERT INTO T_管理2 (ID,商品名)
SELECT T_管理1.F1,T_管理1.F2
FROM T_管理1 LEFT JOIN T_管理2 ON T_管理1.F1 = T_管理2.ID
WHERE T_管理2.ID IS NULL


SELECT文で差分をとって、結果をインサートするだけ

QAccess]2つのテーブルを比較してフィールドの一部が一致したデータを抽出

2つの名簿テーブルを比較してどちらのテーブルにも含まれている個人を抽出したいと考えております。

テーブル名とフィールドは以下のとおりです。

====================
テーブル名「名簿A」

氏名
電話番号
住所
メールアドレス
====================
テーブル名「名簿B」



電話番号
住所
メールアドレス
====================

たとえば、この2つの名簿をメールアドレスで一致したものを抽出する場合は選択クエリのデザインビューで「名簿A」のフィールドを読み込ませ、
メールアドレスフィールドの抽出条件として

Like [名簿B].[メールアドレス]

を入れれば抽出ができたのですが、メールアドレスは、名簿ごとに記入されていたりしなかったりするので、名前での一致を行いたいと思っています。

ここで問題なのが、名簿Aは「氏名」で入力されているのに対し、名簿Bでは「姓」と「名」が別フィールドになっております。

そこで自分なりにやってみたのが、選択クエリのデザインビューで「氏名」のフィールドの抽出条件として

Like (*[名簿B].[姓]*)

を設定するものでした。
これがうまくいけば最終的には

Like (*[名簿B].[姓]*) And Like (*[名簿B].[名]*)

という風にして、名簿Aの「氏名」フィールドに名簿Bの「姓」も「名」も入っているものを抽出できるかな?と考えたのですが、上記のように入力すると、自動的に

Like ("*[名簿B].[姓]*")

となってしまい、何も抽出されなくなってしまいました。

このような方法では希望する抽出は行えないのでしょうか?

お分かりのかた、よろしくお願いいたします。

2つの名簿テーブルを比較してどちらのテーブルにも含まれている個人を抽出したいと考えております。

テーブル名とフィールドは以下のとおりです。

====================
テーブル名「名簿A」

氏名
電話番号
住所
メールアドレス
====================
テーブル名「名簿B」



電話番号
住所
メールアドレス
====================

たとえば、この2つの名簿をメールアドレスで一致したものを抽出する場合は選択クエリのデザインビューで「名簿A」のフィールドを読み込ませ、
メール...続きを読む

Aベストアンサー

> 名簿Aの「氏名」欄には姓と名の間にスペースが入っているものがあり

[名簿B].[姓] & [名簿B].[名]を使った時のクエリで考えてみます。

クエリをSQLビューで表示した時、抽出条件のところは

[名簿A].[名前] Like [名簿B].[姓] & [名簿B].[名]
とか
[名簿A].[名前] = [名簿B].[姓] & [名簿B].[名]

になっていると思います。

[名簿A].[名前]の部分に細工して、Replace([名簿A].[名前]," ","")に書き換えます。
(Replace で空白を削除してあげます)

それをもとに
Replace([名簿A].[名前]," ","") = [名簿B].[姓] & [名簿B].[名]
としてみるとどうなりますか。


※バージョンによっては、クエリ内で Replace が使えないものがあったかと思います。
その時には、補足なりに記述してください。
(対処方法はあります)

QAccessで別テーブルの値をフォームに表示したい

初めてのAccessで分からない事があり質問させてください。

<会社テーブル>
会社ID
会社名
住所

<社員テーブル>
会社ID
社員名
ソート番号

*1社に対し複数の社員レコードが存在

以上のようなテーブルがあるとします

現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)

色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません

リレーション等でひっぱってくる事ができるのでしょうか?

どなたか教えて頂けませんでしょうか

何卒よろしくお願い致します

PS.Access2013で作成中です

Aベストアンサー

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FROM 社員
ORDER BY 社員.ソート番号;

2、コントロールソースに次のように書きます。

=DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID])

http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx

DLookup()については、マイクロソフトの解説を参照されてください。

【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】

マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。

http://www.happy2-island.com/access/gogo03/capter00307.shtml

Public Function DBLookup(ByVal strQuerySQL As String, _
             Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
  Dim DataValue
  Dim rst     As ADODB.Recordset

  Set rst = New ADODB.Recordset
  With rst
    .Open strQuerySQL, _
       CurrentProject.Connection, _
       adOpenStatic, _
       adLockReadOnly
    If Not .BOF Then
      .MoveFirst
      DataValue = .Fields(0)
    End If
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  Set rst = Nothing
  DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
  Exit Function
Err_DBLookup:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBLookup
End Function

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FR...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング