Accessで別テーブルの値を抽出条件にする方法

このQ&Aのポイント
  • Accessのクエリを使用して、別テーブルのフィールドにある値を抽出条件にする方法を教えてください。
  • ホームページの検索キーワードを集計するために、テーブル1からテーブル2の値を除外した結果を出力させたいです。
  • どのように抽出条件を指定すれば、別テーブルのフィールドにある値を除外できるのでしょうか。SQLを使用する方法も教えてください。
回答を見る
  • ベストアンサー

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

OS:WindowsXP SP3 使用ソフト: Microsoft Access2003 選択クエリにて、別テーブルのフィールドにある値すべてを抽出条件にできますか? ホームページに来て頂いた方の検索キーワードを集計しております。 テーブル1には『検索キーワード履歴』フィールドがあり、お客様が使用した検索キーワードが入力されています。(約2万件) テーブル2には『除外キーワード候補』フィールドがあり、不要なキーワードが入力されています。(約10件) クエリにて、『検索キーワード履歴』から『除外キーワード候補』の値を全て除いた結果を出力させたいのですが、 抽出条件をどのように指定したらいいのか分かりません。 そもそも、別テーブルのフィールドにある値すべてを除外させる抽出条件って指定できるのでしょうか。 SQLを用いる方法でも構いませんので教えてください。

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

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キーワードの場合です。

tamariba2
質問者

お礼

お返事頂きましてありがとうございます。 今後の参考にさせていただきます。

tamariba2
質問者

補足

投稿頂きました内容が自己解決の手段と同じでしたので、BAとさせていただきます。

その他の回答 (2)

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.3

>解決方法をご存知でしたら改めてお願い申し上げます。 下記3通りのいづれかをお試しください。 「表示」「集計」で集計方法を「グループ化」 http://office.microsoft.com/ja-jp/access-help/HP003083924.aspx?CTT=1 クエリのプロパティを表示して「固有のレコード」を「はい」にする。 http://office.microsoft.com/ja-jp/access-help/HA001232799.aspx?CTT=1 フィールドのプロパティを表示して「固有の値」を「はい」にする。 http://office.microsoft.com/ja-jp/access-help/HA001232800.aspx

tamariba2
質問者

補足

自己解決しました。 以下、経緯を記入いたします。 目的: クエリの抽出条件として、別テーブルに登録されているレコード・フィールドを除外キーワードとして使いたい。 参考ページ:No30101.クエリのNot演算子について教えていただけませんか http://www.accessclub.jp/bbs/0081/beginers30101.html ■解決方法■ 1.クエリ作成画面にて テーブル1 の『ID』フィールドと『検索キーワード履歴』を登録します。(『ID』フィールド必須) 2.『ID』フィールドの抽出条件に、以下の文法にて入力します。(改行しない場合は半角スペースを入れてください) 文法: Not In (SELECT 検索元テーブル.IDフィールド FROM 検索元テーブル, 除外キーワードテーブル WHERE 検索元テーブル.検索したいフィールド Like "*" & 除外キーワードテーブル.除外キーワードフィールド & "*") 今回の場合: 使用したテーブルは以下の通り テーブル1   (テーブル名/検索元テーブルです) -------------------- ID (フィールド/IDとして使用) 検索キーワード履歴  (フィールド名/検索されるデータ) テーブル2   (除外したいワードが登録されている) -------------------- 除外キーワード候補  (フィールド名/抽出クエリに用いる除外したいキーワードが登録されている) 実装するとこんな感じ: Not In (SELECT テーブル1.ID FROM テーブル1, テーブル2 WHERE テーブル1.検索キーワード履歴 Like "*" & テーブル2.除外キーワード候補 & "*") 以上。 部分一致として動作し、別テーブルのフィールドに登録されたキーワード全件を除外した上で、クエリを出力します。 以上です。失礼いたします。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

選択クエリでテーブル1、テーブル2を連結しないで選択 テーブル1の検索キーワード履歴の抽出条件欄に <>[テーブル2].[除外キーワード候補] と入力して保存 もし、除外キーワード候補が検索キーワード履歴の一部分なら条件は Not Like "*" & [テーブル2].[除外キーワード候補] & "*" としてください。

tamariba2
質問者

お礼

お返事頂きましてありがとう御座います。 教えていただきました部分一致による抽出条件 Not Like "*" & [テーブル2].[除外キーワード候補] & "*" によりクエリを実行したところ、意図せぬ結果が出力されました。 部分一致による抽出は機能していますが、 テーブル2.除外キーワード候補へ登録されているレコードの数ぶん(10件)同一内容が出力されてしまいます。 ■出力結果(各結果が10件ずつ表示される) おにく おにく おにく おにく おにく おにく おにく おにく おにく おにく お魚 お魚 お魚 お魚 お魚 お魚 お魚 ・・・以下略 ■希望(1件毎に表示) おにく お魚 冷凍食品 調味料 菓子 ・・・ ・・・ ・・・以下略 なお蛇足ですが、 Like "*" & [テーブル2].[除外キーワード候補] & "*" にて実行すると、[除外キーワード]を含む値が1件毎正常に出力されます。 Like と Not Like では挙動が異なるようです。 解決方法をご存知でしたら改めてお願い申し上げます。

関連するQ&A

  • ACCESSクエリーの抽出条件について

    OS WIN7 ACCESS 2007使用です。 クエリーの抽出条件について何ですが、テーブルにコードというフィールドがありまして、そこには数値が入力されています。 コード 1 2 3 4 5 ・ ・ このテーブルを元に選択クエリーを作りたいのですが、条件としてコードの値に2と3両方がある場合、2のレコードだけを表示せず、どちらか一方の数値だけの場合またはどちらもない場合は、全てのレコードを表示するようにしたいのです。 抽出条件はどのように書けばよいのでしょうか? いろいろ試したのですが、うまくいきません。 どなたかお助け下さい。

  • 【Access2003】ふたつのテーブルで共通するもの”以外”を抽出する

    1万件くらいの「商品コード一覧」テーブルがあります。 そのなかから、特定の商品コードを除外したいです。 今までは「商品コード」のフィールドの抽出条件に <>"AAAA" And <>"BBBB"And <>・・・ と入力してきたのですが、 除外したい商品コードがかなり増えてきたので、 これをテーブル化して、 「商品コード一覧」テーブルと「除外対象商品コード一覧」テーブルで 一致しないものを抽出するようなクエリを作成したいと思うのですが・・・ そのようなことは可能でしょうか? すでに出た質問かもしれないのですが、 探し方が下手で見つかりませんでした。 よろしくお願いいたします!

  • Accessで任意のテーブルのフィールド値をクエリの抽出条件にできますか?

    Accessで任意のテーブルのフィールド値をクエリの抽出条件にできますか? 工程管理のAccessDBがあり、毎日更新される工程を管理するため、数種類の選択クエリを作成しています。 そのクエリからExcelのデータベースクエリを使ってExcelシートにクエリ毎に各シートに取り込んでいます。 Accessクエリは不定期で抽出条件を変更しています。 抽出条件はどのクエリでも同時に同じものを使うところが多いため、任意に入力した値を抽出条件に指定できれば、一度で全クエリの抽出条件を変更できるのではないかと考えています。 色々調べてもフォームを使った方法は紹介されていますが、上記の条件下でいい方法はないでしょうか? 抽出条件は『Is Null Or >#2008/06/30#』のような感じです。

  • テーブル フィルタ < 抽出されない

    アクセス2010です。 テーブルには、 **************** フィールド1 # () <> **************** と入っています。 画像の様に フィルターで **************** < **************** から始まる文字を抽出しようとすると 検索結果が **************** フィールド1 # () **************** になります。 フィルターで **************** < **************** を含む値を抽出条件にすると、何も抽出されません。 **************** > **************** で終わるにすると 「正しい値を入力してください。」 となります。 **************** フィールド1 # () <> **************** この状態で <> を抽出するにはどうすればいいでしょうか? 全て半角です。

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

    別のテーブルのフィールドを抽出項目にするには? 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 "*チェリー*" と同じような表示結果になるようにしたいのですが、 やり方が調べてもどうしてもわかりません。 どうか皆様のお力を貸してください。 宜しくお願いいたします。

  • Access2003 複雑な条件のデータ抽出

    ☆1つのテーブルで、フィールド[A]~[C]があり、文字および英数字のデータが混在しています。 (ただし、フィールド[C]には、空欄(Null)になっている場合があります) =========================================================== (テーブル(1)) No  [A]      [B]    [C]     [D]      [E]      [F] 1   111      X    あ       2   222      X     か   3   333      X     さ  4   111      Y    た 5   222      Y   (Null)  6   333      Y     は 7   222      Z     ま   8   333      Z     や  9   111      Z    ら    =========================================================== [課題] (1) テーブル(1)のフィールド[A]の値を参照し、「111」の場合は、   フィールド[C]の値を[D]へ抽出する([B]でグループ化) (2) 同様に、フィールド[A]の値を参照し、「222」の場合は、   フィールド[C]の値を[E]へ抽出する([B]でグループ化) (3) 同様に、フィールド[A]の値を参照し、「333」の場合は、   フィールド[C]の値を[F]へ抽出する([B]でグループ化) (4) 新規クエリにて、上記課題(1)~(3)の条件を指定して実行すると    以下の抽出結果が表示される =========================================================== [抽出結果] (テーブル(2)) No  [B]    [D]    [E]      [F] 1   X     あ    か      さ     2   Y     た   (Null)    は   3   Z     ら    ま     や =========================================================== 別々のレコードにあるフィールド[C]の値を、条件に従い テーブル(2)のように1つのレコードにまとめたいのです。  大変恐縮ですが、私はSQLが書けないので、フィールド欄へ関数式を 入力して条件を指定しております。 できましたら、各フィールドへ入力する関数式を教えていただけると助かります。 また、関数だけでは出来ない場合は、SQLで教えていただければ幸いでございます。 お手数お掛けしますが、何とぞ宜しくお願い致します。

  • 別のテーブルの値を抽出条件としたい。

    別のテーブルの値を抽出条件としたい。 環境は SQL Server2005、Access2003(Accesプロジェクト adb)です。 テーブル「社員台帳」で、年度ごとに社員の情報を管理しています。 イメージはこんな感じです。     年度  社員   基本給     2009 aaa \1,000 2009 bbb \1,050      ・ 2010 aaa \1,020 2010 bbb \1,080 これとは別に年度を管理するテーブル「年度辞書」があります。 これは、1レコード(件)のみデータがあり、毎年書き換えています。 イメージは・・・            年度  開始日   終了日      2009 2009/04/01 2010/03/31 2010年度では上記データを変更します。 そこでお聞きしたいのは、テーブル「社員台帳」からデータを抽出する処理を作りたいのですが、 Accessでは クエリの抽出条件(年度)に、 Dlookup("年度","年度辞書") としていました。 これと同じことがしたいのですが、その方法がわかりません。 どうすればよろしいでしょうか? よろしくお願いします。

  • [Access]クエリの抽出条件について

    アクセス初心者です。よろしくお願いします。 クエリの抽出条件に別テーブルのフィールドをあいまい検索で入れたいのですが方法がわかりません。 データシートビューには検索したいテーブル(tbl_1)と 検索する文字列が入ったテーブル(tbl_2)の2つを表示させています。 デザイングリッドは検索したいフィールドを表示し、 抽出条件にLike "*[tbl_2]![フィールド名]*"と入れましたが該当するものがあっても表示されないのです。 どうしたらよいでしょうか。ご伝授ください。

  • ACCESS2003:2番目に大きい値を1レコードのみ抽出

    氏名、ポイントと2つのフィールドをもつテーブル1をもとにクエリ1を作成し、クエリデザインでDMax("[ポイント]","クエリ1","[ポイント]<=" & DMax("[ポイント]","クエリ1"))といった2番目に大きい値(1番目の値が2つ以上ある場合はその値で可)を抽出する式をつくりました。抽出条件に任意の氏名を指定した結果、2番目に大きい値は抽出できましたが、ポイントのデータ数ぶんだけ複数のレコードを表示してしまいます。できれば別のクエリを作成したりせずに、1つのレコードのみ表示させたいのですがどのようにしたらよいか分からず困っております。よろしくお願いします。

  • アクセスでクエリーによる抽出方法

    アクセスでクエリーによる抽出方法を教えてください。 例えばテーブルに    フィールド1  フィールド2  フィールド3    ---------------------------------------      a     100     700       a      200     600       a     300     700 とします。そしてすべてクエリーにとりこみます。ここから抽出するのですが、      フィールド1  フィールド2   フィールド3    ---------------------------------------       a        100    700        a        200     600        a        300   700 抽出条件   [問1] または           [問2]                     [問3] 上記はクエリーのデザインビューですが、[問1]、[問2]、[問3]のパラメータすべてを入力するのであれば何も悩みません。しかし例えばフィールド1は"a"でフィールド2は検索せず(検索対象からはずす)、フィールド3は"700"を検索したい場合、[問1]では"a"を入力し、、[問2]は何も入力しなくて、[問3]は"700"を入力し検索すると、   フィールド1  フィールド2  フィールド3   ---------------------------------------      a    100    700      b    200    600      c    300    700   となるのです。どうにかして フィールド1  フィールド2  フィールド3 --------------------------------------    a     100     700  というような検索結果をだしたいのです。 アクセス初心者です。お願いします。

専門家に質問してみよう