はじめての親子ハイキングに挑戦!! >>

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

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

求める答え

  ・001 ***  
  ・002 *** 

A 回答 (2件)

> もう少しくだいて説明頂くとわかるのですが、


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

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

AテーブルとBテーブルを結合(join)すればいいと思います。


クエリーだと00*のコードを線で結びます。
    • good
    • 3
この回答へのお礼

回答ありがとうございます。 当方、素人のためご説明の意味がよくわからず、もう少しくだいて説明頂くとわかるのですが、よろしいでしょうか?

お礼日時:2007/10/26 12:38

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

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

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

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

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;

...続きを読む

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 別テーブルにある値を抽出条件にしたい

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_2011,T_2010,T_2009
の3つのテーブルがあり、それぞれには同じ形式の顧客情報が入っています。

例えば
顧客id,氏名,住所

この時、
T_2011には2011年に購入履歴のある方
T_2010には2010年に購入履歴のある方
T_2009には2009年に購入履歴のある方

のデータが入っております。

そこで、毎年購入がある方を抽出したいのですが
どうすれば可能でしょうか?

もちろん1つのテーブルに集めて、重複チェックをすれば
出るのですが、今後テーブル数が増えたり、2011年と2090年に
購入のある方など様々な形での抽出をする可能性があるため
クエリなどを利用し一発で抽出する方法があればと考えて
おります。

もちろん検索等を行い似たような例はあったのですが
ちょっと理解ができなかったためご質問させて頂きました。

宜しくお願いいたします。

重複チェックのキーは、顧客IDとなります。

環境は、windowsXP、access2000となっております。

Aベストアンサー

単に、
select a.顧客id,a.氏名,a.住所 from T_2011 a,T_2010 b,T_2009 c
where a.顧客id = b.顧客id and a.顧客id = c.顧客id
で出てくると思いますが。

年によって、氏名(結婚・離婚による)や住所(転居・行政の地番変更による)が変わることがあるので
最新のテーブルのデータを参照しましょう。

2010年、2009年に購入していて20011年に購入していない顧客は?
など購入していないという条件をつけるのは少し難しいと思われるかもしれませんが、
以下のようなSQLです。
select b.顧客id,b.氏名,b.住所 from T_2010 b,T_2009 c
where b.顧客id = c.顧客id and b.顧客id not in (select a.顧客id from T_2011 a)

※本当は、年毎にばらばらに持つのはのぞましくないんですが。
・・・例えば、2009~2011のいづれかの年に購入した客で大阪府に住んでいる人を出したいときとかに
急に手間が増えます。

単に、
select a.顧客id,a.氏名,a.住所 from T_2011 a,T_2010 b,T_2009 c
where a.顧客id = b.顧客id and a.顧客id = c.顧客id
で出てくると思いますが。

年によって、氏名(結婚・離婚による)や住所(転居・行政の地番変更による)が変わることがあるので
最新のテーブルのデータを参照しましょう。

2010年、2009年に購入していて20011年に購入していない顧客は?
など購入していないという条件をつけるのは少し難しいと思われるかもしれませんが、
以下のようなSQLです。
select b.顧客id,b.氏名,b.住所 from...続きを読む

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 重複データを1つだけ表示したい(初心者です)

ACCESSで複数のフィールドに全く同じレコードが複数存在します
(例)
フィールド1  フィールド2  フィールド3
愛知      田中      12
愛知      田中      12
愛知      田中      12
三重      山本      23
三重      山本      23
岐阜      鈴木      33
岐阜      鈴木      33

もともと他のデーターベースからCSVで落としたものをインポートしているので、データの存在自体はどうしようもありませんが、これらの重複しているデータを1件だけ表示したいのです。つまり
(例)
フィールド1  フィールド2  フィールド3
愛知      田中      12
三重      山本      23
岐阜      鈴木      33

どのようにすればよいでしょうか。

Aベストアンサー

クエリにて[固有のレコード]プロパティーを[はい]にします

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

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

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

Aベストアンサー

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

QAccessのクエリで、Left関数を使用して、7桁の数値を抜き出す方

Accessのクエリで、Left関数を使用して、7桁の数値を抜き出す方法。
IDが8桁で入力されているのですが、左から7桁だけを抜き出して、全てのレコードを表示させたかったのですが、誤って入力されている7桁のIDしか表示されませんでした。
いつもExcelを使用している感覚だったので、文字の左から7桁の数値や文字列を抽出して表示してくれるものと思っていました。
元のテーブルに入力されているIDを変更することなく、
クエリで、7桁だけにして、その取り出した7桁で区別し、グループとして認識し合計を出したいと考えているのですが、どうすればよいのでしょうか。
宜しくお願い致します。

Aベストアンサー

>Left関数をする前は、5000行程なのですが、関数を加えたとたん4300程度に減ってしまいます。

関数を加えるのでは無く、関数だけ(演算フィールドのみ)のクエリを作成をして実行させます
単にleft関数で左から何文字取れという演算フィールドしか持たないクエリを実効させれば、指定した桁数に満たない場合には実際にある桁数まで、一文字も入っていない場合には0を返して、全データ分のクエリ結果を返します

全件分のデータが帰って来ないという事は作成しているクエリに問題ありの可能性高いです

先の書き込みに書きましたが、手順は演算フィールドのみのクエリを作成し実行させ全データが取得出来る事を確認してから、この演算フィールドのみのクエリに必用なフィールドを追加してゆくって事してください

Q2つのテーブルに共通するレコードを削除したい

2つのテーブルがあり、両方にID番号フィールドが存在しています。
Aテーブルは元のデータ
Bテーブルは削除したいレコードのID番号
という構成になっているとき、
AテーブルとBテーブルの共通するレコードを削除するにはどうすればよいでしょうか。

ものすごく単純な質問で申し訳ないのですが...宜しくお願いします

Aベストアンサー

1、テーブル内容
 Aテーブル フィールド:ID番号、・・
 Bテーブル フィールド:削除番号、・・

2、まず、選択クエリで削除したいIDのサブクエリを作る。
  ・AテーブルとBテーブルのIDを結合。
  ・表示のSQLでサブクエリをゲット
   内容は
     SELECT Aテーブル.ID番号
     FROM Aテーブル INNER JOIN Bテーブル
ON Aテーブル.ID番号 = Bテーブル.削除ID;   

3、次に削除クエリを作成
  ・新規クエリで削除クエリを作成
  ・Aテーブルのみ選択
  ・ID番号を下にドラッグ
  ・その抽出条件に2で作成したサブクエリを「;」を外して
   IN (  )をつけて入力
   内容は
     IN (SELECT Aテーブル.ID番号
     FROM Aテーブル INNER JOIN Bテーブル
     ON Aテーブル.ID番号 = Bテーブル.削除ID)

 これで、クエリを実行することにより、Aテーブルの内容が、
 Bテーブルの削除番号と同じID番号のレコードを削除できます。

1、テーブル内容
 Aテーブル フィールド:ID番号、・・
 Bテーブル フィールド:削除番号、・・

2、まず、選択クエリで削除したいIDのサブクエリを作る。
  ・AテーブルとBテーブルのIDを結合。
  ・表示のSQLでサブクエリをゲット
   内容は
     SELECT Aテーブル.ID番号
     FROM Aテーブル INNER JOIN Bテーブル
ON Aテーブル.ID番号 = Bテーブル.削除ID;   

3、次に削除クエリを作成
  ・新規クエリで削除クエリを作成
  ・Aテーブルのみ選択
...続きを読む

Q別のテーブルのフィールドを抽出項目にするには?

別のテーブルのフィールドを抽出項目にするには?

Access初心者です。
申し訳ありませんが、急ぎ回答いただきたく思います。
どうか宜しくお願いいたします。

お伺いしたい内容は、

データが多く、抽出条件も多いので、
別のテーブルのフィールドに入っている単語を使い、
抽出したい元データのレコードをあいまい検索して非表示にしたいです。

データの内容は下記になります。

---------------------------------------
元データ(テーブル1とテーブル2から結合したクエリ(名前は元データ)
フィールド1 フィールド2
ID-1     りんご
ID-2     バナナ
・       ・
・       ・
・       ・
ID-2000    チェリー
---------------------------------------
---------------------------------------

除外リスト(テーブル3。名前は除外リスト)
フィールド1
りんご
チェリー



---------------------------------------

元データのフィールド2に
Not Like "*りんご*" And Not Like "*チェリー*"
と記述すれば、フィールド2にりんご、チェリーを含むレコード以外のものが表示され、
欲しい情報が手に入るのですが、(上記例だとバナナのみ表示される)
実際にはりんご、チェリーなどあいまい検索し、非表示にしたいキーワードが100個あります。

なので、除外リストというテーブルをつくり、
そのフィールド内に書かれたキーワードを使い
Not Like "*りんご*" And Not Like "*チェリー*"
と同じような表示結果になるようにしたいのですが、
やり方が調べてもどうしてもわかりません。

どうか皆様のお力を貸してください。
宜しくお願いいたします。

別のテーブルのフィールドを抽出項目にするには?

Access初心者です。
申し訳ありませんが、急ぎ回答いただきたく思います。
どうか宜しくお願いいたします。

お伺いしたい内容は、

データが多く、抽出条件も多いので、
別のテーブルのフィールドに入っている単語を使い、
抽出したい元データのレコードをあいまい検索して非表示にしたいです。

データの内容は下記になります。

---------------------------------------
元データ(テーブル1とテーブル2から結合したクエリ(名前は元データ)
フィールド1 ...続きを読む

Aベストアンサー

以下でどうなるでしょうか。

元データのクエリの名前を「元データ」とします。
除外リストは、そのまま「除外リスト」名とします。

SELECT * FROM 元データ
WHERE NOT EXISTS (
SELECT 1 FROM 除外リスト
WHERE 元データ.フィールド2 LIKE "*" & 除外リスト.フィールド1 & "*"
)
;


曖昧で一致するもの、が無ければ…、と考えてみましたが。

(修理性能はわかりません)


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

人気Q&Aランキング