MS Access中编写SQL查询获取Col_B仅含Blub的唯一行的方法
MS Access SQL查询实现方案
核心逻辑为筛选仅包含Blub记录的Col_C分组,排除所有存在Bar记录的Col_C值,再提取对应分组下的Blub去重记录,以下是两种兼容Access语法的实现:
方法1:NOT IN 子查询实现
SELECT DISTINCT Col_A, Col_B, Col_C FROM 你的实际表名 WHERE Col_B = 'Blub' AND Col_C NOT IN ( SELECT DISTINCT Col_C FROM 你的实际表名 WHERE Col_B = 'Bar' )
逻辑说明:
- 内层子查询先提取所有存在
Col_B='Bar'的Col_C值,形成排除列表 - 外层查询过滤
Col_B='Blub'且Col_C不在排除列表中的记录,DISTINCT关键字实现结果去重
方法2:分组统计判断实现
SELECT DISTINCT t.Col_A, t.Col_B, t.Col_C FROM 你的实际表名 t INNER JOIN ( SELECT Col_C FROM 你的实际表名 GROUP BY Col_C HAVING SUM(IIF(Col_B='Bar',1,0)) = 0 ) 合格ColC ON t.Col_C = 合格ColC.Col_C WHERE t.Col_B = 'Blub'
逻辑说明:
- 内层子查询按Col_C分组,使用Access内置
IIF函数统计每个分组下Bar的出现次数,过滤出出现次数为0的合格Col_C值 - 关联原表提取合格Col_C下的Blub记录,
DISTINCT关键字实现结果去重
使用时请将代码中的
你的实际表名替换为你自己的数据表名称即可。
内容的提问来源于stack exchange,提问作者sa-biene
相关产品推荐
相关产品推荐

