2012-07-05 49 views
2

“AND”和“&”之间的区别我对Access开发很陌生。昨天,我开发了一个查询和where部分,我用“&”,如:有人可以解释访问

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

它退回53次命中。

然后,我把它改成

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

,并获得71次点击。

我知道它与'按位与'与'逻辑与'有关,但是有人需要花一点时间向我解释这个问题,并且没有问题(英语)?

+0

Arrrgh。糟糕的编辑...对不起。 – mrwienerdog 2012-07-05 15:27:41

+1

这是什么版本的MS Access?当我尝试时,我得到了连接的结果,即'-1-1'或'-10',因为'&'是字符串连接运算符。你应该总是使用'AND'。 – mellamokb 2012-07-05 15:35:50

+0

访问07.我跑了一个查询,只使用最后4个数字来匹配信用卡号码。必须进行连接以查看该卡的最后一个号码和员工号码是否不存在,然后我知道这是一张添加到数据库的新卡。 – mrwienerdog 2012-07-05 15:57:11

回答

2

AND是一个逻辑运算符。 &是一个连接运算符。有关Access 2007中可用的各种运营商的更多详细信息,请查看Table of operators

要查看差异,请从WeinerDog开始。

id field1 field2 
1 a 
2  y 
3 

field1field2列中的空白代表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),其中有空两个field1field2

WHERE 
    (WeinerDog.field1 Is Null) AND (WeinerDog.field2 Is Null);