我正在比较两个这样的表:
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))
答案 0 :(得分:1)
我不确定Access是否支持CAST()操作,但在WHERE子句中,您可以尝试:
WHERE CAST(A.col1 AS VARCHAR(100)) <> CAST(b.col1 AS VARCHAR(100))
如果不支持varchar,请使用Access支持的类型。
对于第一次传递,将所有列比较与CAST()操作包装在一起。 一旦有效,从列比较中逐个删除CAST()操作,直到找到不起作用的配对。
希望有更好的Access知识的人可以为您提供更快的解决方案。