Access数据库查询需求:筛选重复客户的非空City、State记录
Access查询:提取唯一客户信息并保留有效地点记录
原Customer表数据
| CustomerNo | CustomerName | City | State |
|---|---|---|---|
| 1234 | Jill Vale | LA | CA |
| 5678 | Chris Redd | DEN | CO |
| 9101 | Leon Kerr | ||
| 2345 | Ada Wray | PHX | AZ |
| 2345 | Ada Wray | LV | NV |
| 2345 | Ada Wray | ||
| 6789 | Sherri Bell | SF | CA |
期望输出
| CustomerNo | CustomerName | City | State |
|---|---|---|---|
| 1234 | Jill Vale | LA | CA |
| 5678 | Chris Redd | DEN | CO |
| 9101 | Leon Kerr | ||
| 2345 | Ada Wray | PHX | AZ |
| 2345 | Ada Wray | LV | NV |
| 6789 | Sherri Bell | SF | CA |
解决方案1:子查询筛选式SQL
通过WHERE条件结合子查询直接实现需求:
SELECT c.* FROM Customer c WHERE (c.City IS NOT NULL AND c.State IS NOT NULL) OR NOT EXISTS ( SELECT 1 FROM Customer c2 WHERE c2.CustomerNo = c.CustomerNo AND c2.CustomerName = c.CustomerName AND c2.City IS NOT NULL AND c2.State IS NOT NULL );
逻辑说明
- 第一条件:直接保留所有
City和State均不为空的记录; - 第二条件:针对没有任何有效地点记录的客户(如Leon Kerr),保留他们的全部记录。
解决方案2:联合查询式SQL
将需求拆分为两部分查询,用UNION ALL合并结果,逻辑更直观:
-- 保留所有地点信息完整的记录 SELECT * FROM Customer WHERE City IS NOT NULL AND State IS NOT NULL UNION ALL -- 保留无有效地点记录的客户的全部记录 SELECT c.* FROM Customer c WHERE NOT EXISTS ( SELECT 1 FROM Customer c2 WHERE c2.CustomerNo = c.CustomerNo AND c2.CustomerName = c.CustomerName AND c2.City IS NOT NULL AND c2.State IS NOT NULL );
内容的提问来源于stack exchange,提问作者hwight
相关产品推荐
相关产品推荐

