
勉強不測で大変悩んでいます。お分かりになる方教えてください。
A(マスタ_登録済)とB(マスタ_仮登録)という2つのテーブルがあり、それぞれに「アカウント」(テキスト型)というフィールドが存在しています。
Bに存在する全レコードのいづれかの「アカウント」フィールドに入力されている文字列が文字列中に含まれているAのレコードの一覧を出力したいのですが、どうしたらできるでしょうか。
たとえば、
[A]
inu
inushiba
inupo
neko
nekotama
nekoshiro
[B]
inu
nekota
とレコードがそれぞれ存在していた場合、
出力したいレコードは
inu
inushiba
inupo
nekotama
となります。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
こんな方法もできます。
クエリにテーブルAとBを選択、結合しない。
(上記で全結合の状態になります。)
テーブルAのみ全表示
テーブルAのアカウントの抽出条件欄に
LIKE [B]![アカウント]&"*"
もし nekoinu のように中間や後ろも出力の場合は
LIKE "*"&[B]![アカウント]&"*"
ご回答ありがとうございます。
全結合にすることを忘れてました!
列に対してワイルドカードは使えないのかな
と悩んでいましたが・・・・問題はこっちだったんですね(^^;;;
ありがとうございました!!
No.5
- 回答日時:
あ、SQL中のAとBは本当のテーブル名に置き換えてくださいね(^^;
select アカウント from マスタ_登録済
where exists
(select * from マスタ_仮登録 where マスタ_登録済.アカウント like "*" & マスタ_仮登録.アカウント & "*")
No.4
- 回答日時:
select アカウント from A
where exists
(select * from B where A.アカウント like "*" & B.アカウント & "*")
多分これでOKかと。相関副問い合わせです。
これをSQLビューに直接書き込んでみてください。
No.2
- 回答日時:
ACCESSでいいんですよね。
(どのACCESSでも同じです)選択クエリーが使えます。
1)テーブルA、テーブルBとも、アカウントのインデックスは「はい (重複なし)」、データ型も「テキスト」にそろえてください。
2)クエリーを作成します。(選択クエリー)
AとBを追加して、AのアカウントとBのアカウントを結合してください。
結合プロパティを「Aの全レコードとBの同じ結合フィールドのレコードだけを含める」としてください(結んでいる線をダブルクリックすると設定できます)
AのアカウントとBのアカウントをフィールドとして指定します。
Aの並び替えとして、「昇順」を指定します。
Bの抽出条件として、「Is Null」と指定してください。
Bの表示をしたくない場合は、Bの表示のチェックをはずしてください。
このようなクエリーとなります。
SELECT A.アカウント
FROM A LEFT JOIN B ON A.アカウント = B.アカウント
WHERE (((B.アカウント) Is Null))
ORDER BY A.アカウント;
意味は、
(Aのアカウントを表示します。)
(Aの全レコードとBの同じアカウントのレコードだけを含めます。)
(BのアカウントがNullのものだけ抽出します)
(Aのアカウントを昇順に並び替えます)
3)このクエリーを実行すると、質問のアカウントのみ残ります。
お分かりいただけますでしょうか。
ご回答ありがとうございました。
・・・が
>SELECT A.アカウント
>FROM A LEFT JOIN B ON A.アカウント = B.アカウント
>WHERE (((B.アカウント) Is Null))
>ORDER BY A.アカウント;
SQLではこのように表示されるのですが、
実行結果にはAのレコード全てが表示されて
しまいます。
何か、私のテーブルに設定漏れがあるのでしょうか(TT)
No.1
- 回答日時:
(1)Aテーブルのフィールド(A)をソートキーとして
昇(降)順でソートします。
(2)Bテーブルのフィールド(B)をソートキーとして
昇(降)順でソートします。勿論昇降順は(1)と(2)で一致させること。
(3)その際注意事項は、(1)と(2)の双方キーフィールドの文字列について、大・小文字、全・半角文字や、途中スペースや表記法(カナなら拗音を大文字か小文字かのようなことほかいろいろ)、前後スペース(TRIMで対策)、左詰め、略号と本名の混合対処などをルールを統一しておく必要があります。
(4)それが完了すると、プログラムではマッチングのアルゴリズムで両者を比較します。この場合(勿論ソート後の)テーブルBを主体にして、レコードの読みを動かします。
Aの第1レコードを読む
Bの第1レコードを読む
AとBのアカウント・フィールドを比較
Bの文字列文字数分をAの文字列から切りだして(仮にAKとなずける)考える(ここがポイント)。
(AK=B)の場合
含まれている場合で、Bのフィールドを添えてAのフ ィールドを書き出し(または印刷)
(AK>B)の場合
Bを読みに行く
上記「AとBのアカウント・フィールドを比較」に行 き以下繰り返し
(AK<B)の場合
Aを読みに行く
上記「AとBのアカウント・フィールドを比較」に行 き以下繰り返し
Aの終了で処理終了。
だだ困ったことにBのアカウントフィールドの中の前後に
同じ語句が含まれているとこのロジックは混乱する。
例えば猫と猫舌、猫なで声がBのアカウントフィールドに続く場合です。Bの猫のAの検索で猫舌や猫舌研究もリストアップされるのでそれで済むなら、Bの猫舌は処理スキップする手も考えられる。それは困ると言うなら、猫のつくAのフィールドをB猫処理後もワークエリアに蓄え、Bに猫舌が出たとき、蓄えたところを探す。蓄えはBの猫含みキーが去った段階で廃棄する。
前記のようなことが無ければ、RDMSではSQLのCONTAINS句が使えるかもしれない。
また上記は前方一致で考えているが途中一致も考えるとなるとロジックが変ると思う。SQLのCONTAINSや
LIKEで考えて見てください。
早速のご回答ありがとうございます。
こんな手があるのですね。。。
>また上記は前方一致で考えているが途中一致も考えるとな>るとロジックが変ると思う。
前方一致だけで問題なしです。
Bのテーブルに入る単語の制限は半角ということしか
かけていないので、
neko neko1 neko2
という形で存在します。
ある人からある名前(neko)でAに登録したいといわれたとき、システム上重複は許さないので、先勝ちでnekoの後に番号を自動または手動で付与して(neko3)という名前で
登録することを了承させるということがしたいのです。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
このQ&Aを見た人はこんなQ&Aも見ています
-
Access]2つのテーブルを比較してフィールドの一部が一致したデータを抽出
Access(アクセス)
-
ACCESS クエリの抽出条件に他のテーブルの値を参照する方法
Access(アクセス)
-
Accessクエリでの、LIKE条件
その他(データベース)
-
-
4
Accessで、1つの項目に複数の置換えを1度でするには?
Access(アクセス)
-
5
別のテーブルのフィールドを抽出項目にするには?
Access(アクセス)
-
6
アクセス 部分一致の抽出
その他(Microsoft Office)
-
7
ACCESS クエリで重複データを最新の1件だけ表示
Access(アクセス)
-
8
Access2003 クエリで、空の列は作れますか?
Access(アクセス)
-
9
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
10
OR関数
その他(Microsoft Office)
-
11
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
12
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
13
Access 別テーブルにある値を抽出条件にしたい
その他(Microsoft Office)
-
14
ACCESSユニオンクエリから新テーブルを
Access(アクセス)
-
15
AccessのDAOでフィールド名を配列に格納して・・・
Visual Basic(VBA)
-
16
「#エラー」の回避
Access(アクセス)
-
17
アクセスで入力したデータの順番が変わってしまいます
その他(ビジネス・キャリア)
-
18
アクセスのエラー「クエリには出力フィールドが1つ以上必要です。」
その他(Microsoft Office)
-
19
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
20
「フォームを作成できませんでした」
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PayPal 期限切れ メール
-
2台目のプレステ5について教え...
-
ニンテンドーアカウント 連携エ...
-
ネットワークに詳しい方教えて...
-
承っておりません。 ↓ できませ...
-
LINEに使用している電話番号を...
-
彼氏のLINEが消えました! 先日...
-
親子で共有していたAppleIDを別...
-
チャットアプリから個人情報の...
-
質問なんですが、、前の携帯でI...
-
このアプリは、何回通報された...
-
Thunderbird 開封確認
-
会社のパソコンなんですが、 退...
-
Microsoftアカウントが復元でき...
-
嫌いな人を徹底的にブロックす...
-
hotmail.co.jpにサインインでき...
-
PS3二台のDLC共有について
-
Outlookの不要アカウント(受信...
-
プレステ5でのEAアカウントの作...
-
1台のPCで複数のメールソフト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2台目のプレステ5について教え...
-
ネットワークに詳しい方教えて...
-
彼氏のLINEが消えました! 先日...
-
PS5のアカウント二つありアカウ...
-
LINEに使用している電話番号を...
-
親子で共有していたAppleIDを別...
-
承っておりません。 ↓ できませ...
-
Thunderbird 開封確認
-
高3女子です ローターやバイブ...
-
PS4で別アカウントにデータを移...
-
iphoneとipad2台持ちの場合モ...
-
会社のパソコンなんですが、 退...
-
質問なんですが、、前の携帯でI...
-
Switchで子供と2人でフォートナ...
-
プレステ5でのEAアカウントの作...
-
Outlookの不要アカウント(受信...
-
どうしていけないのでしょうか?
-
Wordを開くと、前に編集してい...
-
line 同じ名前を使われている!
-
マイクロソフトアカウントを作...
おすすめ情報