2

我对 Access 开发非常陌生。昨天,我开发了一个查询,在 WHERE 部分中,我使用了“&”,如下所示:

WHERE ((condition A Is Null) & (condition B Is Null))

它返回了 53 次点击。

然后我把它改成

WHERE ((condition A Is Null) AND (condition B Is Null))

并获得 71 次点击。

我知道这与“按位与”与“逻辑与”有关,但有人可以花点时间用 noobish(英语)向我解释这一点吗?

4

1 回答 1

3

AND是一个逻辑运算符。 &是一个连接运算符。查看运算符表以获取有关 Access 2007 中可用的各种运算符的更多详细信息。

要查看操作上的差异,请从 table 开始WeinerDog

id field1 field2
 1 a
 2        y
 3

field1和列中的空白field2表示 Null 值。

接下来运行此查询:

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 个表达式的真值。这些真值是真 (-1) 或假 (0)。但是,由于连接的结果必须是字符串,因此在将它们连接在一起之前,首先将数值真值转换为字符串。

然后检查WHERE子句。db 引擎将为您提供WHERE子句评估为的所有行True。实际上,不只是 -1,除零以外的任何非 Null 值都可以代表True. 正如您从该concat_result列中看到的那样,这些行都不会被子句评估为零 ( False) WHERE... 因此表中的所有行都将包含在查询结果集中。

If you change the WHERE clause to substitute AND for &, the query will return only the WeinerDog row (id=3) which has Null for both field1 and field2.

WHERE
    (WeinerDog.field1 Is Null) AND (WeinerDog.field2 Is Null);
于 2012-07-05T18:44:54.587 回答