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

このQ&Aのポイント
  • データの内容は、テーブル1とテーブル2から結合したクエリ(名前は元データ)であり、フィールド1とフィールド2の情報が含まれています。
  • 抽出条件が多い場合でも、別のテーブルのフィールドに入っている単語を使い、あいまい検索して非表示にしたいデータを抽出することができます。
  • 実際には、除外リストというテーブルを作成し、そのフィールドに書かれたキーワードを使って非表示にしたいデータを絞り込むことができます。
回答を見る
  • ベストアンサー

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

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

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

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

以下でどうなるでしょうか。 元データのクエリの名前を「元データ」とします。 除外リストは、そのまま「除外リスト」名とします。 SELECT * FROM 元データ WHERE NOT EXISTS ( SELECT 1 FROM 除外リスト WHERE 元データ.フィールド2 LIKE "*" & 除外リスト.フィールド1 & "*" ) ; 曖昧で一致するもの、が無ければ…、と考えてみましたが。 (修理性能はわかりません)

karukaru3
質問者

お礼

ありがとうございます! できました!! 本当に助かりました!詳しく書いてくださってありがとうございます! 皆様にポイントお付けしたいのですが、解決できたご回答でつけさせてください! 本当にありがとうございました!

その他の回答 (2)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

こちらが参考になると思います ACCESS クエリ 抽出条件が多い場合 http://okwave.jp/qa/q4719476.html

参考URL:
http://okwave.jp/qa/q4719476.html
karukaru3
質問者

お礼

ご回答ありがとうございます! 参考に貼っていただいたリンク拝見いたしました! ありがとうございます! ただ、勉強不足で申し訳ありません。 下記項目、あいまい方向を追加のやり方がわからず… もしよろしければ教えていただけないでしょうか?(新しく質問したほうがいいのかわからず…申し訳ありません) どうぞ宜しくお願いいたします。 検索する文字列テーブルに細工(曖昧方向を追加) 検索する文字列テーブル(名前:TS)  フィールド(名前:FN)/ 曖昧方向(名前:SP)   aaa            1   bba            1 曖昧方向の意味 =1:後方曖昧 (例:aaa*) =2:前後曖昧 (例:*aaa*) =3:前方曖昧 (例:*aaa)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

こういう課題はVBAで無いと出来ないでしょう。 そして背後にはSQLの利用が必要か。 操作だけで、検索条件の文字列を他テーブルから持ってくるのは、アクセスの予想外の使い方(の要望)ではないかな。 SQLを使う場合も1SQL文の文字列の長さに制約があるので注意が必要なんだか、見たところまず大丈夫か。 http://www.accessclub.jp/bbs6/0007/das1816.html 指定した物を削除したクエリをつくり、それを対象にさらに次の指定したものを削除の方法を繰り返す方法も指定が多いと現実的な方法ではないし。 共通しないレコードを抽出する方法も指定が多いと現実的でない。 一回限りなら、Not Like "*りんご*" And Not Like "*チェリー*"・・の文字列をプログラムなどでどこかにつくり、それを手動でSQLビューのSQL文にコピー貼り付けするとか。 そうなるとSQL文全体をプログラムで作るに近いが。 ーー あるいは全レコードを読んで(ADOなど)、各レコードにおいて、100条件に該当するかどうか(Instr関数など利用)調べ、該当しないレコードを書き出す、を繰り返す方法も思い浮かぶが、処理時間がかかるかも。条件に該当するものに、決めたフィールドに印をつければ、その後のフィルタは簡単だが。

karukaru3
質問者

お礼

ご回答ありがとうございます! 簡単にできるようなものではないのですかね…;; まだまだ勉強不足でプログラムを作るのは難しく… 今後も教えていただいたリンクを参考に勉強してみたいと思います。 どうもありがとうございます。

関連するQ&A

  • テーブルのデータを利用して抽出したい

    テーブル内のキーワードに合致するデータを抽出するクエリを作成したいです。 テーブル1には"商品名"という項目があるリストがある。 テーブル2には"除外キーワード"のみのリスト。 テーブル2の"除外キーワード"を使用してテーブル1の商品名に該当するデータを抽出。 部分一致での抽出を希望します。 除外キーワードは徐々に増えていきます。

  • アクセス クエリ 複数フィールド検索

    お世話になります。 アクセスのクエリを使用して、テーブルデータ内にある複数フィールドの中から、 特定のキーワードが存在しないIDのみを抽出したいのですが、どのようにすればよいでしょうか。 ご教示よろしくお願いいたします。 以下のIDの購入履歴でバナナを購入していないIDのみを抽出したい。 例 フィールド名  購入履歴1  購入履歴2 購入履歴3 購入履歴4 購入履歴5 ID1        バナナ    りんご    りんご          ID2        りんご     りんご    りんご    バナナ ID3 りんご     りんご

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

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

  • 一つのテーブルの複数のフィールドから抜き出す方法について

    一つのテーブルの複数のフィールドから抜き出す方法について 例えば下記のようなテーブルがあったとします。       1     2     3     4 A商店  りんご   みかん   バナナ B商店  みかん   イチゴ   くり    パイナップル C商店  イチゴ   パイナップル バナナ D商店  イチゴ   バナナ   りんご のようなテーブルがありフィールド1~4いずれかにみかんを含むクエリーを作成し次のような結果をACCESSで作成したいのですが、簡単な方法はあるのでしょうか?       1     2     3     4 A商店  りんご   みかん   バナナ B商店  みかん   イチゴ   くり    パイナップル よろしくお願いいたします。 尚、使用しているデータベースはACCESS2000です。

  • ACCESSのデータ抽出について

    項目が同じ(1)テーブルと(2)テーブルと(3)の産地データをリレーションシップでつなぎデータ■クエリ_結果2のように抽出したいのですが■クエリ_結果2のちょうに重複するデータしか抽出できません。 どうしたら結果1のように全ての商品を抽出できるでしょうか? アクセス初心者です。よろしいくお願いします (1)テーブル【中央11月データ】 バナナ 50 りんご 10 ミカン 100 (2)テーブル【関西11月データ】 バナナ 30 梨 60 (3)産地データ バナナ フィリピン りんご 青森 みかん 愛媛 梨 千葉 ■クエリ_結果1 バナナ フィリピン 80 りんご 青森 10 みかん 愛媛 100 梨 千葉 60 ■クエリ_結果2 バナナ フィリピン 80

  • Access 複数フィールドにまたがる抽出条件

    Access2016で、クエリの抽出条件の設定に悩んでいます。解決策をご存知の方はご教示いただきますようお願い致します。 ★やりたいこと★ 【テーブル1】に以下のようなフィールドがあります。 [フィールドA] "製品a" "製品b" "製品c ..." のようなデータ群 [フィールドB] "00 "01" の2種類のデータ群 [フィールドC] "98" "99" の2種類のデータ群 フィールドBが "00" で、かつフィールドCが "98" に該当するデータのみを除外する抽出条件を設定したい。 ※フィールドBが "00" でフィールドCが "99" のようなデータは除外したくない SQLとかは使わず、初心者でも後から解読・編集できるような方法があればありがたいです。

  • テーブルからデータを抽出する場合のスピード

    お世話になっております。 データ抽出のスピードについて質問があります。 例えば3つのページを作るとします。それぞれ、IDで分けるとして、一つがaaa二つ目がbbb三つ目がcccとします。それぞれのデータをMySQLより抽出しようと思ってます。その際のテーブルのフィールドはどれも同じです。 一つの方法として、一つテーブルを作成し、そこに全てのデータを入れて、それぞれWHERE id = aaaなどとしてデータを抽出する方法。 二つ目は、それぞれIDごとにテーブルを作成し、それぞれのテーブルにそれぞれのデータを入れて抽出する方法。 どちらが負荷、速度共にいいのでしょうか。 私が思うに、一つ目の方法の場合、データが増えてきたときに、WHERE id = aaaなどとして抽出するのに時間がかかってしまうように思います。 ちょっと分かりにくい説明かと思いますが、どなたか宜しくお願いします。

    • ベストアンサー
    • MySQL
  • 2つフィールドを連結して検索するには

    MySQLの初心者です。よろしくお願いします。 1つのテーブルにある2つのフィールドのうち、どちらかにキーワードが入っている場合(両方に入っている場合も含む)を抽出したいのですが、検索するキーワードが1個の場合は、下記のようにすれば、うまく動くのですが、 ●1個のキーワードで検索する場合 (例として、2つのフィールドのうちどちらかに「山」のキーワードが入っている場合を抽出) select * from table WHERE (item_name LIKE "%山%" or outline LIKE "%山%" ) ●テーブルの内容(テーブル名:table) item_name | outline ==========+========= 山がある + 山と川 ----------+---------- 山がある + 川と森 ----------+--------- 山がある + 谷と林 --------------------- 質問したいことは、上記のテーブルから、item_nameとoutlineのフィールドのうち、2つのキーワード「山」と「川」が両方含まれるレコードを抽出したいです。上記のテーブルでいうと、抽出の結果、1行目と2行目が抽出したいのです。 ちなみに、下記のように記述したら、上記のテーブルで1行目だけ抽出されます。 select * from table WHERE (item_name LIKE "%山%" and item_name LIKE "%川%" or outline LIKE "%山%" and outline LIKE "%川%" ) 他にも、下記のように試してみたのですが、うまく抽出できませんでした。 SELECT * FROM table WHERE (concat(item_name,outline) LIKE '%山%' and concat(item_name,outline) LIKE '%川%') item_nameとoutlineのフィールドを結合して、結合した文字列で、「山」と「川」の両方が入っているレコードを抽出する方法はありますか? 2つのフィールドの文字列をあわせたなかから、「山」と「川」のキーワードが両方含まれるレコードを抽出したいのですが、何かよい方法はありますでしょうか。ご回答よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • テーブル内の同一フィールドは

    メールTo_Fromクエリ Key From FromDomain To ToDomain      To    ToDomain  1 name1 abc.co.jp   To1 abc.co.jp  2 name2 abc.co.jp   To2 customer.com  Toname4 jogai_2com  3 name3 abc.co.jp   To3 jogai_3.com 除外ドメインリストテーブル jogai_1.co.jp jogai_2.net jogai_3.com 上記のような『メールTo_From』クエリから 除外ドメインリストテーブルにひとつでも該当するものは含まない レコードを抽出したいと思ってます。 検索対象であるメールTo_Fromクエリの、ToDomainフィールドは複数存在します(50以上) 何か良いSQL文はありませんでしょうか?

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

    2つの名簿テーブルを比較してどちらのテーブルにも含まれている個人を抽出したいと考えております。 テーブル名とフィールドは以下のとおりです。 ==================== テーブル名「名簿A」 氏名 電話番号 住所 メールアドレス ==================== テーブル名「名簿B」 姓 名 電話番号 住所 メールアドレス ==================== たとえば、この2つの名簿をメールアドレスで一致したものを抽出する場合は選択クエリのデザインビューで「名簿A」のフィールドを読み込ませ、 メールアドレスフィールドの抽出条件として Like [名簿B].[メールアドレス] を入れれば抽出ができたのですが、メールアドレスは、名簿ごとに記入されていたりしなかったりするので、名前での一致を行いたいと思っています。 ここで問題なのが、名簿Aは「氏名」で入力されているのに対し、名簿Bでは「姓」と「名」が別フィールドになっております。 そこで自分なりにやってみたのが、選択クエリのデザインビューで「氏名」のフィールドの抽出条件として Like (*[名簿B].[姓]*) を設定するものでした。 これがうまくいけば最終的には Like (*[名簿B].[姓]*) And Like (*[名簿B].[名]*) という風にして、名簿Aの「氏名」フィールドに名簿Bの「姓」も「名」も入っているものを抽出できるかな?と考えたのですが、上記のように入力すると、自動的に Like ("*[名簿B].[姓]*") となってしまい、何も抽出されなくなってしまいました。 このような方法では希望する抽出は行えないのでしょうか? お分かりのかた、よろしくお願いいたします。

専門家に質問してみよう