4

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

氏名フィールドを含む従業員テーブルを検索しています。このフィールドは、「Sam」または「Mr Evans」または「Mr Sam Evans」のいずれかです。

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

次のように、* を使用した場合と使用しない場合のように試しました

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

私が望む結果だけでなく、このクエリは、私が望まない「Mr. Samson」の Employee FullName を返す可能性があります。文字列内の単語の一部に Sam を含む FullNames ではなく、完全な単語 "Sam" を含む結果のみを表示したいのです。だから、サム・エヴァンスさん、サム・スミスさん、サリー・エヴァンスさんなどに会いたいです。

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

編集 - 解決策

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

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

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

4

2 に答える 2

3

SQL とアクセスのワイルドカードは%記号です。

それで

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

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

最初または最後にのみ使用して%、文字列の最初/最後だけの一致をそれぞれ取得できます。

編集

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

コメントに基づいて編集

特定の単語を選択するには、ちょっとした回避策が必要です。

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

必要に応じて、文の開始部分 `LIKE 'MyWord *' と、コンマ、ピリオド、感嘆符などを含む単語をキャプチャできます...

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

于 2012-05-28T10:42:06.550 に答える
1

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

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

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

編集:

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

于 2015-01-23T02:13:16.003 に答える