2012-01-10 6 views
2

私はMS Access 2007の中の単純なクエリを実行しようとしています:一対一の関係

SELECT Table1.Name, Table2.Name FROM TABLE2 
INNER JOIN TABLE1 ON TABLE2.Name = TABLE1.NAME; 

私が知っているこれらの2つのフィールドが等しく持っているという事実のために値;例えばtable1table2には両方とも「マイクスミス」の行があります。ただし、クエリを実行すると、レコードは表示されません。 table2に入って名前のレコードを書き直すと、そのレコードがクエリに表示されます。

これらのテーブルはいずれも、リンクされたCSVファイルからのメイクテーブルクエリによって作成されます。

+0

余分なスペースがないことを確認しましたか?また、万が一フィールドの予約語がありますか?すべての – crix

答えて

1

dbエンジンが、Mike SmithのName値が両方のテーブルで同じであることに同意するかどうかを確認します。 @JohnFxが述べたように

SELECT 
    [Name] AS name_field, 
    Len([Name] AS name_length, 
    'TABLE1' AS source_table 
FROM TABLE1 
WHERE 
    [Name] ALike '%Mike%' 
    AND [Name] ALike '%Smith%' 
UNION ALL 
SELECT 
    [Name] AS name_field, 
    Len([Name] AS name_length, 
    'TABLE2' AS source_table 
FROM TABLE2 
WHERE 
    [Name] ALike '%Mike%' 
    AND [Name] ALike '%Smith%' 
ORDER BY 1, 3; 

は、末尾のスペースの可能性に加えて、あなたの名前の値が空白でない目に見えない文字が含まれる場合があります。 Excelのデータソースからインポートするときにこのような文字が発生しました。

更新:あなたはDAOを使用してクエリを実行している場合、あなたはこのようなWHERE句を修正することができます

WHERE 
    [Name] Like '*Mike*' 
    AND [Name] Like '*Smith*' 

しかしADOの需要ので、ADOの下でクエリを実行するとき句は、トラブルになるWHEREことANSIワイルドカード(*と?の代わりに%と_)を使用します。 ALike(ANSI Like)キーワードは、ANSIワイルドカードを使用するようにdbエンジンに指示します。したがって、クエリがDAOまたはADOのどちらで実行されても同じ動作をします。

+0

まず、MS-Accessでない「似」動詞が存在しないとワイルドカード文字は「*」ではない「%」そのことについて申し訳ありません –

+0

です。それはAccess 2007で動作するようです。私の謝罪。 –

+0

まあ、私は以前にしようとしましたが、その時点では不可能だった私の答えを私が変更しなければ、その行動は禁じられました。 –

関連する問題