AND
是一个逻辑运算符。 &
是一个连接运算符。有关Access 2007中可用的各种运营商的更多详细信息,请查看Table of operators。
要查看差异,请从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
列。它包含两个连接在一起的表达式的真值。那些真值是True(-1)或False(0)。但是,由于连接的结果必须是字符串,因此数字真值在它们连接在一起之前首先被转换为字符串。
然后检查WHERE
条款。数据库引擎将为您提供WHERE
子句评估为True
的所有行。实际上,不只是-1,但除零之外的任何非空值都可以代表True
。正如您从concat_result
列中可以看到的那样,那些行将不会被WHERE
子句评估为零(False
)......因此表中的所有行都将包含在查询结果集中。
如果更改WHERE
子句来代替AND
为&
,查询将返回只有WeinerDog
行(ID = 3),其中有空两个field1
和field2
。
WHERE
(WeinerDog.field1 Is Null) AND (WeinerDog.field2 Is Null);
Arrrgh。糟糕的编辑...对不起。 – mrwienerdog 2012-07-05 15:27:41
这是什么版本的MS Access?当我尝试时,我得到了连接的结果,即'-1-1'或'-10',因为'&'是字符串连接运算符。你应该总是使用'AND'。 – mellamokb 2012-07-05 15:35:50
访问07.我跑了一个查询,只使用最后4个数字来匹配信用卡号码。必须进行连接以查看该卡的最后一个号码和员工号码是否不存在,然后我知道这是一张添加到数据库的新卡。 – mrwienerdog 2012-07-05 15:57:11