Access中基于Customer、ECR关联表创建两类指定查询的问询
Access 双查询实现方案
表关联基础说明
- 关联字段:
Customer表与ECR表通过公共字段cif(客户ID)建立关联
查询1:已关闭且存在有效ECR记录的客户
需求
展示Customer表中status值为closed,且对应ECR表存在ECRstatus值为active记录的所有客户ID
实现SQL
SELECT DISTINCT Customer.cif FROM Customer INNER JOIN ECR ON Customer.cif = ECR.cif WHERE Customer.status = 'closed' AND ECR.ECRstatus = 'active';
逻辑说明
用内连接匹配两张表的关联记录,通过DISTINCT去重,避免同一客户有多条active状态ECR时重复输出cif。
查询2:已关闭且无有效ECR记录的客户
需求
仅展示Customer表中status值为closed,且没有任何关联ECRstatus为active记录的客户,存在1条及以上有效ECR的客户不会出现在此查询结果中。
实现SQL(兼容性优先)
SELECT Customer.cif FROM Customer WHERE Customer.status = 'closed' AND NOT EXISTS ( SELECT 1 FROM ECR WHERE ECR.cif = Customer.cif AND ECR.ECRstatus = 'active' );
低版本Access兼容写法
如果你的Access版本不支持NOT EXISTS语法,可以改用左连接实现:
SELECT DISTINCT Customer.cif FROM Customer LEFT JOIN ECR ON Customer.cif = ECR.cif AND ECR.ECRstatus = 'active' WHERE Customer.status = 'closed' AND ECR.cif IS NULL;
逻辑说明
通过子查询/左连接校验客户是否存在有效ECR记录,只要匹配到1条active状态的ECR就会被排除,完全符合筛选要求。
内容的提问来源于stack exchange,提问作者Yehia Ahmed
相关产品推荐
相关产品推荐

