MS Access查询非预期结果排查:逻辑错误咨询
免责声明:本数据库无真实姓名,数据来自知名组织GCF(Goodwill Community Foundation)提供的免费在线教程,数据库来源为GCF官方Access 2016示例数据库。
数据库子集
| 名字 | 姓氏 | 城市 |
|---|---|---|
| Alex | Hinton | Cary |
| Amaya | Gibson | Raleigh |
| Danny | Haverford | Raleigh |
| Dick | Whitman | Raleigh |
| Denver | Ferguson | Raleigh |
| Don | Hamm | Cary |
| Alix | Mars | Raleigh |
| Dwyane | James | Cary |
| Dwight | Parker | Raleigh |
| Andrew | Bedinger | Raleigh |
| Dane | Raught | Raleigh |
| Andrzej | Wujek | Raleigh |
| Alyssa | Ullman | Raleigh |
| David | Barrett | Raleigh |
| Anisa | Naser | Raleigh |
| Avery | Kelly | Raleigh |
| Derek | MacDonald | Chapel Hill |
| Alex | Yuen | Cary |
| David | Barrett | Raleigh |
查询问题分析
第一部分:查询正常工作
以下查询结果符合预期:
- 自然语言描述:获取满足以下条件的姓名及城市:(名字以'a'开头且城市为'raleigh')或者(名字以'd'开头且城市不为'chapel hill')
- 查询视图:(查询设置截图)
- 查询结果:(符合预期的结果截图)
第二部分:查询失效
- 自然语言描述:获取满足以下条件的姓名及城市:(名字以'a'开头且城市为'raleigh')或者(名字以'd'开头且城市不为'chapel hill')或者(名字以'd'开头且城市不为'cary')
- 问题现象:查询结果仍包含来自'Chapel Hill'和'Cary'的数据,不符合预期
- SQL语句:
SELECT Customers.[First Name], Customers.[Last Name], Customers.City FROM Customers WHERE (((Customers.[First Name]) Like "a*") AND ((Customers.City)="raleigh")) OR (((Customers.[First Name]) Like "d*") AND (Not (Customers.City)="raleigh")) OR (((Customers.[First Name]) Like "d*") AND (Not (Customers.City)="cary"));
- 查询视图:(查询设置截图)
- 查询结果:(不符合预期的结果截图)
问题原因解析
NOT的逻辑不太符合直觉,查询本身语法正常,但逻辑未匹配预期需求:
Not (Customers.City)="chapel hill"会筛选出所有城市不是Chapel Hill的数据,自然包含Cary的记录Not (Customers.City)="cary"会筛选出所有城市不是Cary的数据,自然包含Chapel Hill的记录
两个条件用OR连接时,只要满足其中一个就会被选中,导致Chapel Hill和Cary的记录都出现在结果里。
内容的提问来源于stack exchange,提问作者thanks_in_advance
相关产品推荐
相关产品推荐

