VBA ADO使用Excel ODBC Driver时EXCEPT运算符报错的问题咨询
问题解答
没错,你碰到的问题确实是因为Microsoft ODBC Excel Driver(包括后续的ACE OLEDB Driver)不支持EXCEPT这类标准SQL集合运算符。Excel对应的SQL方言(Jet SQL/ACE SQL)并没有实现EXCEPT、INTERSECT这类特性,这就是为什么这条语句会报FROM子句语法错误,而其他基础查询能正常执行。
针对你的需求,我们可以用Jet/ACE SQL支持的语法来实现相同的效果,这里有两种常用的替代方案:
方案1:LEFT JOIN + IS NULL
通过左连接关联两张表,筛选出旧表中没有匹配记录的新表行:
SELECT new.* FROM [new$] AS new LEFT JOIN [prev$] AS prev ON new.唯一标识字段 = prev.唯一标识字段 -- 替换成你用来判断行唯一性的字段,比如主键或组合键 WHERE prev.唯一标识字段 IS NULL
注意:如果需要通过多个字段组合判断行唯一,要把所有匹配条件都加到
ON子句中,比如ON new.col1 = prev.col1 AND new.col2 = prev.col2;另外Excel工作表作为数据源时,表名需要用方括号括起来,且末尾加$(如果是整个工作表的话,命名区域则不需要$)。
方案2:NOT EXISTS子查询
用子查询判断新表的行是否不存在于旧表中,逻辑更直观:
SELECT * FROM [new$] AS new WHERE NOT EXISTS ( SELECT 1 FROM [prev$] AS prev WHERE new.唯一标识字段 = prev.唯一标识字段 -- 替换成你的匹配字段 )
额外提醒:确保两张表中用来匹配的字段数据类型完全一致,否则可能出现明明有匹配但查询结果却包含该行的情况,比如数字类型和文本类型的字段直接比较会导致匹配失效。
内容的提问来源于stack exchange,提问作者KristofDM
相关产品推荐
相关产品推荐

