一对一关系未在 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;

我知道这两个字段的值相等;例如table1table2 都有“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 中的文本字段上正确连接的主要内容,如果未能解决你的问题,请参考以下文章

MS Access DLookup 文本字段语法问题

如何在 MS-Access 的表单上显示 Web 浏览器控件中的表格字段内容?

MS Access 验证规则未在子表单中触发

如何在 MS Access 2010 中的单元格中显示空值

MS Access 无法在实体和桥接表之间创建一对多关系

表格中的 MS Access 下划线文本