一对一关系未在 MS Access 中的文本字段上正确连接
Posted
技术标签:
【中文标题】一对一关系未在 MS Access 中的文本字段上正确连接【英文标题】:One-to-one relationship not joining properly on text field in MS Access 【发布时间】:2012-01-10 18:33:41 【问题描述】:我正在尝试在 MS Access 2007 中进行简单查询:
SELECT Table1.Name, Table2.Name FROM TABLE2
INNER JOIN TABLE1 ON TABLE2.Name = TABLE1.NAME;
我知道这两个字段的值相等;例如table1
和 table2
都有“Mike Smith”行。但是,当我运行查询时,没有显示任何记录。如果我进入table2
并重写名称记录,它将显示在查询中。
这两个表都是通过对链接的 CSV 文件进行表查询来创建的。
【问题讨论】:
你检查过没有多余的空格吗?另外,字段的名称是保留字吗? 【参考方案1】:查看数据库引擎是否同意两个表中 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 下运行,都将进行相同的操作。
【讨论】:
首先,MS-Access中没有“Alike”动词,通配符是“*”而不是“%” 很抱歉。它似乎在 Access 2007 中有效。我很抱歉。 当然,我之前尝试过,但是在没有我更改我的答案的情况下禁止该操作,这在当时似乎是不可能的 - 不过现在可以了。以上是关于一对一关系未在 MS Access 中的文本字段上正确连接的主要内容,如果未能解决你的问题,请参考以下文章