【復活求む!】惜しくも解散してしまったバンド|J-ROCK編 >>

ACCESSの超初心者です。

選択クエリで、80件ほどの抽出条件を部分一致で
設定しています。(Likeを使用)

例えばこんな感じです。
 フィールド
  aaa1
  bbb52
  aaa33
  aac8
  bba35
  bba115
 
 抽出条件 Like "aaa*" Or Like "bba*"
→抽出結果 aaa1,aaa33,bba35,bba115

今後も条件が増えていく予定なので、別の
良い方法がないかと思っています。
(できるかどうかわかりませんが、
別にテーブルを作り、その一覧内の文字が
含まれるレコードのみを抽出)

皆さんのお知恵をお貸しいただけないでしょうか。

宜しくお願いします。

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

A 回答 (1件)

検索対象の文字列をテーブルで扱うのであれば以下のような感じになるでしょうか。



検索されるテーブル(名前:T1)
 フィールド(名前:FN)
  aaa1
  bbb52
  aaa33
  aac8
  bba35
  bba115

検索する文字列テーブル(名前:TS)
 フィールド(名前:FN)
  aaa
  bba


SELECT T1.FN
FROM T1, TS
WHERE ((T1.FN) Like [TS].[FN] & "*");



検索する文字列テーブルに細工(曖昧方向を追加)
検索する文字列テーブル(名前:TS)
 フィールド(名前:FN)/ 曖昧方向(名前:SP)
  aaa            1
  bba            1

曖昧方向の意味
=1:後方曖昧 (例:aaa*)
=2:前後曖昧 (例:*aaa*)
=3:前方曖昧 (例:*aaa)


SELECT T1.FN
FROM T1, TS
WHERE ((T1.FN) Like Choose([TS].[SP],"","*","*") & [TS].[FN] & Choose([TS].[SP],"*","*",""));
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

おかげさまで、無事クエリを作成できました。
どうやったらいいのか分からずに困っていたので
本当に助かりました。

ありがとうございました。

お礼日時:2009/02/15 18:23

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

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

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

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

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

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別のテーブルのフィールドを抽出項目にするには?

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

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 & "*"
)
;


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

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

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で空白のデーターをクエリで判定/識別する方法を教えてくださ

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

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

Aベストアンサー

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

QACCESS クエリー 抽出条件が多い場合

アクセス初心者です。(2003です)
商品コードのテーブルから、
32個のキーワードを含むものを抽出したいです。
商品コードの中のキーワードの位置は
先頭や最後など決まりはなく、バラバラです。

クエリの抽出条件の欄が9個しかないので、
9個ずつバラバラにクエリを作ってみました。
*02S*
*05F*
...
...
というふうに条件を並べています。

この3つのクエリ結果を
エクセルに出してはっつけて1枚のマスターに
しようかと思っていますが…
かなり手作り感があふれていて…(^^;)汗汗
もうちょっと単純な方法はないでしょうか?

また、なんだか心配なので
エクセルでテーブルをフィルタにかけ
キーワードを一個ずつ抽出してみましたが
アクセスで出た結果と違います…。(エクセルのが少ないです)
重複するキーワードがあるからかと思い
ピボットで見ても、重複は4件しかありません。
クエリを分けているからでしょうか?
どっちが正しいのでしょうか?
自分の作ったデータにまったく信頼が持てません。。。(--;)

これを出さないと退社できないのですが
チーム内に誰もいないので困っております。
助っ人お願い致しますm(__)m

アクセス初心者です。(2003です)
商品コードのテーブルから、
32個のキーワードを含むものを抽出したいです。
商品コードの中のキーワードの位置は
先頭や最後など決まりはなく、バラバラです。

クエリの抽出条件の欄が9個しかないので、
9個ずつバラバラにクエリを作ってみました。
*02S*
*05F*
...
...
というふうに条件を並べています。

この3つのクエリ結果を
エクセルに出してはっつけて1枚のマスターに
しようかと思っていますが…
かなり手作り感があふれていて…(^^;)汗汗
もうちょ...続きを読む

Aベストアンサー

9行は 
(カーソルをあてて)
挿入



でふやせます

----------------------------------
参考まで
わたしはあいまい検索には
Like命令を使っています(* 使用 )

QACCESSのクエリー抽出条件にIIFを使用して

コンボボックスの値を抽出条件にしたクエリーを作成しています。
コンボボックスにて"ALL"を選択したときに、全レコードを表示したく、
以下の式を入れたのですが全表示がされません。

IIf([Forms]![テーブル名]![コンボ値]="ALL",Like "*",[Forms]![テーブル名]![コンボ値])

Like "*" の部分がいけないのでしょうか?
(偽の場合は選択した値のレコードが抽出されます)

どなたか教えてください、よろしくお願いいたします。

Aベストアンサー

>IIf([Forms]![テーブル名]![コンボ値]="ALL",Like "*",[Forms]![テーブル名]![コンボ値])
この条件は、抽出したいフィールドの「抽出条件」の所に入力しているんですよね?

ちょっと内容を変えまして・・・
(1)「抽出条件」ではなく、「フィールド」の行に入力してください。
 (つまり、抽出用の新しいフィールドを作成するということです。)
(2)式は
式1: IIf([Forms]![テーブル名]![コンボボックス名]="ALL",True,[テーブル名]![コンボボックス名]=[Forms]![テーブル名]![コンボボックス名])
にしてください。
(3)IIfを入力したフィールドの「抽出条件」に True と入力します。
 (Trueの囲い文字はいりません。)

どうでしょう?ちゃんと出ますよね・・・?
ただし、フィールドを作ったわけですから、
クエリのデータシートビューには必要のない、-1などが表示されたフィールドが表示されますよね。
これは、デザインビューに戻って、表示のチェックボックスをオフにすれば解決します。

IIFというのは、ExcelのIF関数とはちょっとイメージが違います。
以下解説↓

今回の条件式の部分には、[コンボ]="ALL"という評価式(←ポイント!)が入力されています。
Excelでは条件式というイメージが強いですが、
IIFは評価式という意味です。
つまり、この評価式自体がTrueとFalseを持つということです。
IIf([Forms]![テーブル名]![コンボボックス名]="ALL",・・・・)という式で、
条件をALLとしたら・・・
評価結果=True となります。
そして真の場合の処理にTrueを指定することで、IIFの戻り値がTrueになります。
条件にALL以外を入力すると・・・
評価結果=False となります。
そして偽の場合の処理の戻り値が、ALL以外の条件になります。
抽出条件にもTrueを入力したのは、無条件に全件が表示されるのを防ぐためです。

これは、表示をオンにして動作確認すると分かりやすいかも知れませんね。
または、とりあえず現象を直して、理解は後々・・・でもよいかも知れません。
健闘を祈ります!

>IIf([Forms]![テーブル名]![コンボ値]="ALL",Like "*",[Forms]![テーブル名]![コンボ値])
この条件は、抽出したいフィールドの「抽出条件」の所に入力しているんですよね?

ちょっと内容を変えまして・・・
(1)「抽出条件」ではなく、「フィールド」の行に入力してください。
 (つまり、抽出用の新しいフィールドを作成するということです。)
(2)式は
式1: IIf([Forms]![テーブル名]![コンボボックス名]="ALL",True,[テーブル名]![コンボボックス名]=[Forms]![テーブル名]![コンボボックス名])
にして...続きを読む

QACCESSのクエリで抽出条件「または」は9個までしかかけませんよね…

10個以上の条件を扱うことは可能なのでしょうか?

もし、方法があればお教えください。よろしくお願いします。

Aベストアンサー

Access97で確認したところ、確かにデフォルトでは
そのぐらいの行数しかありませんが、
メニューの「挿入(I)」で「行(R)」をクリックすれば増やせます。

また、抽出条件列にマウスカーソルを移動し、左向きの
黒矢印になった状態でクリックすると、行が選択できます。
クリックしたままドラッグすると複数行が選択できますので(反転表示)、
これをCopy(キーボードでCntl+C)した後、
空白行一行を再び反転表示させてPaste(Cntl+V)しても、
行を増やすことができます。


・・・ただ、そこまで抽出条件を増やすと、場合によっては結果表示までに
だいぶ待たされる恐れがあります。
実際のデータを見ないと何とも言えませんが、
1つのクエリ内であまり多くの抽出条件を指定するのは
避けた方がいいと思います。
(複数のクエリに分割して、後でひとつに結果をまとめた方が早くなることがありますので、参考までに)

QACCESS クエリ 条件以外のレコードを抽出するには?

クエリで、抽出条件(文字列)以外のレコードを全て抽出したいのですが、うまくいきません。

そのフィールドには空白もあり、
抽出条件を「Not In ("A","B")」とすると、
"A","B"以外の文字列が抽出され、空白のものは抽出されません。

「"A"や"B"でない、他の全てのレコードを抽出したい」という場合、どのようにすればよいのでしょうか?

Aベストアンサー

抽出条件の次の行に(または の行)
Is Null
を加えてください。
または、空白だったらの条件となります

QACCESS 重複データを1つだけ表示したい(初心者です)

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

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

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

Aベストアンサー

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

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

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

Aベストアンサー

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

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

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

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


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

人気Q&Aランキング