web-dev-qa-db-ja.com

Access 2010 SQLクエリは、完全な単語のみの文字列で部分一致を検索します

これが単純なものであることを願っています。希望する結果を得る方法が見つからないだけです。SQLで間違ったキーワードを使用している可能性がありますか?

フルネームフィールドを含む従業員テーブルを検索しています。このフィールドは「Sam」または「MrEvans」または「MrSamEvans」です。

Nameフィールドを含む別のNamesテーブルと部分的に一致するものを見つけようとしています。これは通常、「Sam」や「Evans」などの短い名前ですが、「SamEvans」の場合もあります。

私は次のように*の有無にかかわらず、のように試しました

SELECT tblEmployee.FullName, tblNames.Name
FROM tblEmployee, tblNames
WHERE tblEmployee.FullName Like "*" & tblNames.Name & "*"

このクエリは、必要な結果だけでなく、不要な「Mr.Samson」の従業員のフルネームを返す可能性があります。文字列内の単語の一部にSamが含まれるFullNamesではなく、完全なWord "Sam"を含む結果のみが表示されます。だから、サム・エヴァンスさん、サム・スミスさん、サリー・エヴァンスさんなどに会いたいです。

これが理にかなっていることを願っています。助けてくれて本当にありがとうございます

編集-ソリューション

私はこれを解決しました-同様の問題を抱えている人に役立つかもしれない場合に備えて投稿するだけです。

WHERE " " & tblEmployee.FullName & " " Like "* " & tblNames.Name & " *"

したがって、基本的に、従業員の氏名の最初と最後にスペースを追加することで、すべての正しいレコードを取得します。このようなフィールドを埋めることができるとは思っていませんでしたが、同僚が私にチップをくれました!

4
RockyRoad

SQLとアクセスのワイルドカードは%シンボルです。

そう

"SELECT tblEmployee.FullName, tblNames.Name FROM tblEmployee, tblNames
WHERE tblEmployee.FullName Like '%" & tblNames.Name & "%'"

文字列tblNames.Nameの任意のインスタンスに一致します

開始時または終了時に%を使用して、文字列の先頭/文字列の末尾のみをそれぞれ一致させることができます。

編集

申し訳ありませんが、canは、期待どおりにアクセスに*?を使用できますが、クエリを文字列としてに送信していますか?いくつかのVBAコード?またはそれを直接実行しようとしていますか?クエリで直接行う場合と同様に、tblNames.Name文字列をクエリに解析することはできず、フォームまたはその他のコードから渡す必要があります。

コメントに基づいて編集

特定の単語を選択するには、必要な回避策が少しあります。

SELECT * FROM table WHERE field LIKE '* myWord *' OR field LIKE '* myWord.*'

オプションで、カンマ、フルストップ、感嘆符などを使用して、文の開始 `LIKE'MyWord * 'およびWordをキャプチャできます。

INステートメントを実行し、ルックアップテーブルにすべてのバリエーションを含めて、別のオプションとして保守しやすくすることができます。

3
RemarkLima

Access 2007で編集した投稿からこのソリューションを使用しましたが、完全に機能しました。

WHERE " " & tblEmployee.FullName & " " Like "* " & tblNames.Name & " *"

さて、私の質問は、SQLコードは一体何をしているのか、そしてなぜそれが機能するのかということです。誰かがそれを分解できますか?

編集済み:

OK、私の混乱は、AccessSQLとより標準的なSQLでの文字の使用法の違いから生じました。 &はAccessで連結され、+は標準SQLで連結されます。また、*はAccessの任意の数の文字のワイルドカードであり、SQLでは%です。

1
user3236990