AKB48の推しメンをセンターにできちゃうかもしれない!? >>

お世話になっております。
早速質問ですが、

Aテーブル
CD 名称
1  大阪府
2  京都府

Bテーブル
名称
大阪市伊丹区
京都府京都市
京都府宇治市

とデータがあったとします。
Aテーブルの名称フィールドとBテーブルの名称を照らし合わし、
Bテーブル名称一部とAテーブルの名称が合致していたるデータを、AテーブルのCDをつけて表示したいのです。

結果↓
CD 名称
1  大阪市伊丹区
2  京都府京都市
2  京都府宇治市

こういう事はクエリでできますか?

有識者の方ご教授お願い致します。

A 回答 (1件)

SQLを使えば結合条件に式もかけます


それでやりますか
とりあえずクエリデザインビューで名称同士を結合したクエリを作ります
(もちろんこれでは何も表示されません)
出来たクエリをSQLビューで開き
ON Bテーブル.名称 = Aテーブル.名称

ON Bテーブル.名称 like Aテーブル.名称 & "*"
と書き換えます

出来上がり
SELECT Aテーブル.CD, Bテーブル.名称
FROM Aテーブル INNER JOIN Bテーブル ON Bテーブル.名称 like Aテーブル.名称 & "*";

この回答への補足

ONでLikeを使うと怒られちゃうんですよね・・・・。
僕が悪かっただけなのでしょうか・・・。

しかし、自己解決致しました。
どうもご返信ありがとうございました^^


SELECT A.CD, b.名称
FROM b, A
WHERE (((b.名称) Like '*' & [A]![名称] & '*'));

補足日時:2008/02/28 17:58
    • good
    • 0

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

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

関連するカテゴリからQ&Aを探す

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

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

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 が使えないものがあったかと思います。
その時には、補足なりに記述してください。
(対処方法はあります)

Qアクセス 部分一致の抽出

アクセスの部分一致の抽出が出来ず困ってます。
テーブル1       テーブル2
あいうえお       あいうえお090
かきくけこ        かきくけこ090
さしすせそ       がぎぐげご010
なにぬねの       たちつてと050
               なにぬねの020
結果
あいうえお
かきくけこ
なにぬねの
 
上のような2つのテーブルでテーブル2がテーブル1と完全一致していれば(前方完全一致が理想です。)それ以外に余計な物が後ろについていても抽出し、結果となるようにしたいのですが、スキルがなく詰まってます。
今回初めてアクセスに触り「できる」の本を見ながらテーブルを作成するところまでは出来たのですが、周りに聞く人もおりません。
皆様のお知恵をお貸しください。
よろしくお願いいたします。
okwave内の他の場所でSQLかVBAかどちらでやりたいのか書いたほうが良いとアドバイスをもらいましたが、私はどちらも自分で使えないレベルです。勝手で申し訳ないのですが、お力をお貸しください。

Aベストアンサー

部分一致は「LIKE」を使います。
http://www.seta.media.ryukoku.ac.jp/manual/office/access/query/selection.html

クエリを使う方法を示します。添付図を参照してください。
ポイントは
・リレーションシップ(テーブル同士をつなぐ線)は張らない(あれば削除する)。
・「抽出条件」を「like [テーブル1].[fld1] & "*"」とする
以上です。

Q2つのテーブルをLIKE演算子のように結合させたい

こんにちは
DB2 ver 8.1 fixPak5
VB6
にて開発を行っております。

TABLEa の NAMAEa KANKEIa
TABLEb の ADANAb FLAG
というテーブルがあるとします
そしてそれぞれのテーブルに
TABLEa のNAMAEa に '山田'
TABLEb のADANAb に '山'
というデータがはいっていたとき

この2つのデータをLIKE演算子のように結合させたいのですが、どのようにしたらいいのでしょうか。
イメージとしては

SELECT
NAMAEa, KANKEIa, FLAG
FROM TABLEa
LEFT OUTER JOIN
TABLEb
ON NAMAEa LIKE ADANAb%

伝わるでしょうか・・・
できたら1つのSQL文で完結させたいです。
駄目だったらRecordSetにもたせて処理しようかと思いますが、
今後の為にも何か方法があるのでしたら教えてください。

Aベストアンサー

こんにちは。

マニュアルを確認してみました・・・。

LIKE演算子の右側には、まずString式が必要ですね・・・。
後は何をくっつけてもいいみたいです。
つまり、いきなり列名が来ているのがダメという事です。
ちなみにPOSSTR関数の場合は、検索される側は、列名でもOKですが・・・。

%列名%もダメですよねぇ。
なんかいい方法が思いつきません・・・。

※そもそも、なんでADANAbのテーブルにNAMAEaがないの???
リレーショナルになってないような・・・?
(^^ゞ

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

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

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

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

Aベストアンサー

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

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の超初心者です。

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

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

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

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

宜しくお願いします。

Aベストアンサー

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

検索されるテーブル(名前: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],"*","*",""));

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

検索されるテーブル(名前: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)/ 曖昧方向(名...続きを読む

QAccessのクエリで、あいまい検索の方法

いつもお世話になっております。ちょっと困っています。AV資料の管理にAccessを利用していますが、曖昧検索をしたいので、クエリで、

Like "*" & [筆者・監督名は?:] & "*"

で監督名に"黒沢"と入力すると、きちんと表示されますが、あいまい検索の項目を増やすと、例えば、
邦題タイトルとか、同じように

Like "*" & [邦題は?:] & "*"

なんて検索しようとし、ただし、その部分に何も入れないで先程の監督名に"黒沢"と入れると、なぜか、件数が減ってしまいます。原因としては、邦題の部分で何もない場合には何も表示されなくて、邦題と監督名にきちんと入っていれば、監督名検索でHITします。

これをあいまい検索複数で、監督名だけで、全ての件数(邦題が空白でも表示)が表示されるようにするには、クエリ部分でどのように表示させればいいのでしょうか?

分りにくい内容ですが、どなたかお知恵をお貸し下さい。

Aベストアンサー

ちょっとだけ解説。
ワイルドカードをヘルプで調べると、
「*」は0文字以上の文字列 とあります。
Null は文字列ではないので Like '*' ではヒットしません。

Nz は Null値を置き換える関数です。
Nz([邦題],"") は
IIf(IsNull([邦題]),"",[邦題]) と同じです。

Nz([邦題],"") を Like "*" & [邦題は?:] & "*"
で検索すると、元Nullのものが、"" になっていますから
[邦題は?:] に未入力で全件ヒットになります。

No1さんの
[邦題]を Like "*" & [邦題は?:] & "*" Or Is null
で検索でもよさそうですが、
監督名が未入力で、邦題を入力した場合に
余計なものがヒットしてしまいます。

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

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

Aベストアンサー

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

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

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

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

QAccessのマクロでモジュールを実行させたい。

Access2002を勉強中の初心者です。

AccessでDB1という名前のデータベースを作成し、その中で、モジュール1というモジュールを作成しました。これを実行するマクロを作成したく、次のようにマクロを作成しました。
マクロのデザイン画面でアクションに「プロージャの実行」を選択、プロージャ名入力覧の右側の...のボタンを押して式ビルダ画面を表示、ここの「関数」フォルダを開いてDB1を選択、表示されたモジュール1を貼り付けてOK。
しかし、このマクロを実行すると、次のエラーとなります。「DB1 指定されたDB1が見つけることができない関数名が含まれています」

根本的に方法が間違っているのでしょうか?
アドバイスをよろしくお願いします。

Aベストアンサー

#1です。

ちょっと時間ができたので、Accessのヘルプで、
 "RunCode/プロシージャの実行" アクション
についてのトピックを見てみました。

結論から言うと、基本的な考え方が間違っているみたいです^^;。

「プロシージャの実行」アクションでは、「Function」プロシージャを指定するようです。
Subプロシージャではエラーになります。


つまりご質問の件では、
「Subプロシージャを呼び出すFnctionプロシージャ」をまず書かなけれえばならない。
そして、マクロのアクションでは、あらためてこのFunctionプロシージャを指定しなければいけません。


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

人気Q&Aランキング