Access 2016如何获取查询结果的反向数据集?
在Access 2016中实现反向查询(布尔NOT逻辑)
我来帮你搞定这个Access查询的问题!你之前的思路方向是对的,只是在细节上没处理好——尤其是NOT EXISTS的关联部分,再加上Access本身不支持EXCEPT语法,确实容易踩坑。下面给你两种可靠的实现方法:
方法1:修正后的NOT EXISTS查询
你之前的NOT EXISTS写法错误在于子查询没有和主查询的主键字段关联,导致它只是判断“有没有符合条件的记录”,而不是“当前行是否在目标结果集里”。正确的写法需要关联两个主键列:
SELECT RoomNumber, StructureNumber FROM TimeTables AS t1 WHERE NOT EXISTS ( SELECT 1 -- 这里用SELECT 1即可,NOT EXISTS只关心是否存在,不需要返回实际字段 FROM TimeTables AS t2 -- 关联主查询和子查询的两个主键 WHERE t2.RoomNumber = t1.RoomNumber AND t2.StructureNumber = t1.StructureNumber -- 原查询的过滤条件 AND t2.HourNumber = 1 AND t2.DayNumber = 1 )
方法2:使用LEFT JOIN + IS NULL实现差集
这是Access中实现“差集”逻辑的经典方案,通过左连接保留主表所有行,再筛选出匹配不到目标结果集的行:
SELECT t1.RoomNumber, t1.StructureNumber FROM TimeTables AS t1 LEFT JOIN ( -- 原查询的结果作为子查询 SELECT RoomNumber, StructureNumber FROM TimeTables WHERE HourNumber = 1 AND DayNumber = 1 ) AS t2 ON t1.RoomNumber = t2.RoomNumber AND t1.StructureNumber = t2.StructureNumber -- 筛选出t2中没有匹配的行(即不在原查询结果里的行) WHERE t2.RoomNumber IS NULL
为什么你之前的尝试失败了?
EXCEPT语法问题:Access 2016确实不支持EXCEPT或MINUS这类标准SQL差集语法,必须用上面两种替代方案。NOT EXISTS的关联错误:你之前的子查询没有和主表关联,导致只要数据库里存在任何符合HourNumber=1 AND DayNumber=1的记录,整个WHERE NOT EXISTS就会返回false,最终查询结果为空。
内容的提问来源于stack exchange,提问作者Black-Wolf
相关产品推荐
相关产品推荐

