SQL select查询不起作用。在ms访问2010

时间:2011-11-01 20:11:13

标签: sql ms-access ms-access-2007 ms-access-2003

enter image description here

这是我的两个图表和我的查询。显然你确实看到一些参数名称匹配。但我的查询显示没有结果。这是为什么?

谢谢。

虽然此查询是在Access 2010中进行的,但它也适用于2003年和2007年

如果您无法详细阅读查询。只需放大此网页

UPDATEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE: **************************** 8

感谢您的帮助,但我已经按照自己的方式解决了这个问题。并且因为我正在为工作做这件事,我需要它快速完成并且没有太多的时间来解决为什么访问修剪无法工作=(...我仍然不知道为什么。

但是我的源表很大,没有一个试验空间。只有我从另一个表上传的参数表是excel文件和99行。

我回到了原始的excel文件。试过修剪一下。复制粘贴修剪的列并粘贴特殊值以摆脱公式,它仍然有空间!这个jsut是修剪功能的错误还是什么?

无论如何,我使用了a = left(cell,len(cell)-1)来摆脱一个trailign空间

然后重新上载excel参数表,现在它正常工作。冗长的故事但是。如果有人对TRIM无效的原因有另一个建议请解释。我用过LTRIM RTRIM。同时和jsut TRIM

5 个答案:

答案 0 :(得分:2)

在对@flayto的回复中,你说“*结果是在ParameterTable中每个Parameter_Name值后面有一个尾随空格。但是我试过修剪它确实说它更新了该表中的所有条目但是一个空格sitll确实不要离开!*“

有几次我将Excel电子表格中的一系列单元格复制到Access表格中。 Access中的数据包含我预期的文本后面的隐藏尾随字符。由于这些字符不是空格,因此Trim()函数不会删除它们。查看Paramater_Name值后面的实际内容。

SELECT
    Parameter_Name,
    Len(Parameter_Name) AS Length_of_Parameter_Name
    Asc(Right(Parameter_Name, 1)) AS rightmost_character
FROM ParameterTable;

修复将取决于您找到的内容。例如,如果总有一个且只有一个不需要的字符,您可以使用此UPDATE语句将其丢弃:

UPDATE Parameter_Table
SET Parameter_Name = Left(Parameter_Name, Len(Parameter_Name) -1);

无论您尝试更新什么,请务必先备份数据库,以防出现任何问题。

答案 1 :(得分:1)

因为您要将ParameterTable.Full_NameT1_SourceTable.Parameter_Name进行比较。

您应该将ParameterTable.Parameter_NameT1_SourceTable.Parameter_Name进行比较。

***注意:我在看这个时就把它留下了,但是我怀疑是领先/尾随空间(正如其他几个人所提到的那样)。

***可能的其他解决方案:将其修改为特定的内部联接。我从MS找到的链接没有具体你不能做你做过的事情,但他们都使用显式的INNER JOIN语法。

所以你可以试试:

SELECT T1.Full_Name, T2.Parameter_Name
FROM ParameterTable T1
INNER JOIN T1_SourceTable T2
  ON T1.Parameter_Name = T2.Parameter_Name

据我所知,这不应该改变任何东西 - 但是,根据我找到的链接,你可能会试一试。

答案 2 :(得分:1)

您确定字段值中没有前导或尾随空格吗?尝试使用LTRIM(RTRIM(T1_SourceTable.Parameter_Name))中的LTRIM / RTRIM包装每个字段,以确保不是问题。

答案 3 :(得分:1)

它们是完全相同的数据类型吗?如果没有,对于Access,请尝试使用LIKE而不是equals。

t1.parameter_name,如t2.parameter_name

请参阅此处的示例。 http://office.microsoft.com/en-us/access-help/access-sql-where-clause-HA010278156.aspx

答案 4 :(得分:1)

如果您的表是链接的并且基础数据类型是char而不是varchar,那么即使您认为已修剪它,它也将是空白填充。您将不得不更改底层数据类型或加入trim(parameter_name),这将是昂贵的!