如果Access 2003中存在类型不匹配,如何比较两个表?

时间:2011-11-30 04:01:59

标签: sql ms-access-2003 jet

我正在比较两个这样的表:

SELECT *
FROM tableA AS A INNER JOIN tableB AS B ON B.ID = A.ID
WHERE A.col1 <> B.col1 OR A.col2 <> B.col2 OR ...

此查询不起作用,因为我在某处出现类型不匹配(并且Access不会告诉我哪些列不匹配)。

是否有一种有效的方法来查找哪些列不匹配? 有没有办法忽略不匹配并进行比较呢?

修改 我尝试使用Cstr将所有内容转换为字符串(受到Tuck答案的启发),但Access说我在那里有一个Invalid use of Null。这是否意味着Cstr返回Null?如果是这样,我尝试了nz(Cstr(...), 0),这也无济于事。

修改 将来电nz内的电话移至Cstr,摆脱了Invalid use of Null并解决了问题:Cstr(nz(..., 0))

1 个答案:

答案 0 :(得分:1)

我不确定Access是否支持CAST()操作,但在WHERE子句中,您可以尝试:

WHERE CAST(A.col1 AS VARCHAR(100)) <> CAST(b.col1 AS VARCHAR(100)) 

如果不支持varchar,请使用Access支持的类型。

对于第一次传递,将所有列比较与CAST()操作包装在一起。 一旦有效,从列比较中逐个删除CAST()操作,直到找到不起作用的配对。

希望有更好的Access知识的人可以为您提供更快的解决方案。