一对一关系未正确连接到MS Access中的文本字段

时间:2012-01-10 18:33:41

标签: sql ms-access join

我正在尝试在MS Access 2007中进行简单查询:

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

我知道这两个字段具有相同的值;例如table1table2都有“Mike Smith”行。但是,当我运行查询时,不会显示任何记录。如果我进入table2并重写名称记录,它将显示在查询中。

这两个表都是通过链接CSV文件中的make table查询创建的。

1 个答案:

答案 0 :(得分:1)

查看db引擎是否同意两个表中Mike Smith的Name值相同。

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;

除了@JohnFx提到的尾随空格的可能性之外,您的Name值可能包含不是空格的不可见字符。从Excel数据源导入时,我偶尔会遇到这样的字符。

更新:如果您使用DAO运行查询,则可以修改WHERE子句,如下所示:

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

但是,在ADO下运行查询时,WHERE子句会出现问题,因为ADO要求您使用ANSI通配符(%和_而不是*和?)。 ALike(ANSI Like)关键字告诉db引擎期望ANSI通配符,因此无论查询是在DAO还是ADO下运行,都将运行相同的操作。