MS Access 查询产生意外结果(图示)

问题描述 投票:0回答:1

(免责声明:此数据库中没有实名。数据库来自GCF(Goodwill Community Foundation,一个受人尊敬的组织)在线免费提供的教程数据库来源

我在数据库查询中得到了意想不到的结果。

我知道我做错了什么。我需要你对我做错了什么的建议。

第 1 部分:有效

下面的查询按预期工作。

(更新) 用简单的英语:“给我名字,姓氏,城市,其中((名字以“a”开头,城市是“raleigh”)或(名字以“d”开头,城市不是“教堂山”))“

查询:

结果:

第 2 部分:这行不通

(更新) 用简单的英语:“给我名字,姓氏,城市,其中((名字以“a”开头,城市是“raleigh”)或(名字以“d”开头,城市是不是“教堂山”)或(名字以“d”开头且城市不是“cary”)“

在下面的查询中,我仍然看到来自城市“Chapel Hill”和“Cary”的结果。所以它没有按预期工作。

查询:

结果:

第 2 部分我做错了什么?

提前致谢。

sql ms-access boolean-logic
1个回答
0
投票

它做的正是它应该做的。
你的第二行和第三行基本上是

(LIKE d* AND NOT foo) OR (LIKE d* AND NOT bar)

布尔代数

Distributivity of ∧ over ∨:   x ∧ ( y ∨ z ) = ( x ∧ y ) ∨ ( x ∧ z )

这变成:

LIKE d* AND (NOT foo OR NOT bar) =
LIKE d* AND NOT (foo AND bar) =
LIKE d* AND NOT False =
LIKE d* AND True =
LIKE d* 

所以 d* 线根本没有过滤城市。

我不确定你到底想做什么,但在 SQL 中很可能更容易制定,你可以在 AND 和 OR 周围自由地放置括号,而不是图形查询编辑器。

© www.soinside.com 2019 - 2024. All rights reserved.