勉強不測で大変悩んでいます。お分かりになる方教えてください。
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で空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
-
4
Accessクエリでの、LIKE条件
その他(データベース)
-
5
Accessで、1つの項目に複数の置換えを1度でするには?
Access(アクセス)
-
6
Access 別テーブルにある値を抽出条件にしたい
その他(Microsoft Office)
-
7
OR関数
その他(Microsoft Office)
-
8
ACCESS クエリで重複データを最新の1件だけ表示
Access(アクセス)
-
9
Accessで別テーブルの値をフォームに表示したい
その他(データベース)
-
10
アクセス 部分一致の抽出
その他(Microsoft Office)
-
11
別のテーブルのフィールドを抽出項目にするには?
Access(アクセス)
-
12
Access2003 クエリで、空の列は作れますか?
Access(アクセス)
-
13
Accessでレコードを別テーブルへコピーするには
Access(アクセス)
-
14
AccessからExcelにエクスポートする時に常に上書きしたい
Excel(エクセル)
-
15
Accessでデータシートに同じデータがいくつもでてしまいます。
その他(データベース)
-
16
Access→Excelへエクスポートすると日付の表示形式が変化する
Excel(エクセル)
-
17
Access のリレーションシップで一部一致
その他(データベース)
-
18
ACCESS 複数テーブル・複数フィールドを参照する不一致クエリ
Access(アクセス)
-
19
2つのテーブルに共通するレコードを削除したい
Access(アクセス)
-
20
Accessでテーブルの値をテキストボックスに代入するには?
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Fortniteについてです 僕は今ま...
-
ネットワークに詳しい方教えて...
-
高3女子です ローターやバイブ...
-
Yahoo IDが使えなくなってしま...
-
プレステ5でのEAアカウントの作...
-
PS4で別アカウントにデータを移...
-
Yahooアカウントにログインでき...
-
フォートナイトが出来ない 仕様...
-
親子で共有していたAppleIDを別...
-
彼氏のLINEが消えました! 先日...
-
楽天ペイを複数端末で使用でき...
-
LINEに使用している電話番号を...
-
XFLAG、IDに登録済みメールアド...
-
スマホでエロゲしてみたいんで...
-
Thunderbird 開封確認
-
ヤフーアカウントについての質...
-
PS4のNetworkのサインインにつ...
-
このアプリは、何回通報された...
-
PS4から5にデータ移行しようと...
-
メルカリは過去に強制退会にな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Fortniteについてです 僕は今ま...
-
Yahoo IDが使えなくなってしま...
-
高3女子です ローターやバイブ...
-
ネットワークに詳しい方教えて...
-
学校のタブレット
-
親子で共有していたAppleIDを別...
-
PS4から5にデータ移行しようと...
-
質問なんですが、、前の携帯でI...
-
この電話番号は、既に何度も確...
-
プレステ5でのEAアカウントの作...
-
Thunderbird 開封確認
-
フォートナイトが出来ない 仕様...
-
Yahooアカウントにログインでき...
-
ヤフーアカウントについての質...
-
LINEに使用している電話番号を...
-
どうしていけないのでしょうか?
-
Yahoo!でログインしようとする...
-
楽天ペイを複数端末で使用でき...
-
XFLAG、IDに登録済みメールアド...
-
ps4でpsnに登録しようとしたら...
おすすめ情報