我对Access developpement很新。昨天,我开发了一个查询,在WHERE部分,我使用了“&”如:
WHERE ((condition A Is Null) & (condition B Is Null))
它返回了53次点击。
然后我将其改为
WHERE ((condition A Is Null) AND (condition B Is Null))
并获得71次点击。
我知道它与'bitwise'和'vs'逻辑和'有关,但是有人可以花点时间用noobish(英语)向我解释这个吗?
答案 0 :(得分:2)
AND
是一个逻辑运算符。 &
是一个连接运算符。有关Access 2007中可用的各种运算符的详细信息,请查看Table of operators。
要查看操作中的差异,请从表WeinerDog
开始。
id field1 field2
1 a
2 y
3
field1
和field2
列中的空格代表空值。
接下来运行此查询:
SELECT
WeinerDog.id,
WeinerDog.field1,
WeinerDog.field2,
(WeinerDog.field1 Is Null)
& (WeinerDog.field2 Is Null) AS concat_result
FROM WeinerDog
WHERE
(WeinerDog.field1 Is Null) & (WeinerDog.field2 Is Null);
该查询应该为您提供此结果集:
id field1 field2 concat_result
1 a 0-1
2 y -10
3 -1-1
检查concat_result
列。它包含字符串,它们是连接在一起的2个表达式的真值。那些真值是True(-1)或False(0)。但是,由于连接的结果必须是字符串,因此数字真值在连接在一起之前首先被转换为字符串。
然后检查WHERE
子句。 db引擎将为您提供WHERE
子句评估为True
的所有行。实际上,不仅仅是-1,而且除了零之外的任何非空值都可以代表True
。正如您从concat_result
列中看到的那样,False
子句中的所有行都不会被评估为零(WHERE
)...因此表中的所有行都将包含在查询结果集。
如果您更改WHERE
子句以替换AND
&
,则查询将仅返回WeinerDog
行(id = 3),两行{ {1}}和field1
。
field2