0

我用 WHERE 运行查询

“COMPUTERCLASSROOM_SLOT1 = 0 或 COMPUTERCLASSROOM_SLOT2 = 0 和 COMPUTERCLASSROOM_DONE = 1”

虽然它返回所有满足要求的行..这是表行数据

根据列表示,这里是行的值

ROW 1 =                0                       0                          0    
ROW 2 =                1                       0                          0   
ROW 3 =                1                       2                          1   
ROW 4 =                1                       3                          0   
ROW 5 =                1                       4                          1   
ROW 6 =                0                       5                          1   
ROW 7 =                0                       0                          1   

他们都回来了..这是为什么?如果我用 AND 更改 OR,它将跟随查询,返回第 7 行...这很奇怪..我需要在一个查询中使用 OR 和 AND,因为我的目标是返回一个至少为 0 的行SLot1 或 Slot2,并且 DONE = 1

4

3 回答 3

2

它应该是

WHERE (COMPUTERCLASSROOM_SLOT1 = 0 OR COMPUTERCLASSROOM_SLOT2 = 0) AND 
       COMPUTERCLASSROOM_DONE = 1
于 2013-01-11T16:11:07.587 回答
1

正如@Jack 已经指出的那样,问题在于您没有使用括号。因此,您的查询在逻辑上与您所期望的不同。

试试@JW. 的片段,它会完美运行。

WHERE (COMPUTERCLASSROOM_SLOT1 = 0 OR COMPUTERCLASSROOM_SLOT2 = 0) AND (COMPUTERCLASSROOM_DONE = 1) 
于 2013-01-11T16:14:29.693 回答
1

根本原因

AND 被评估为乘法;OR 被评估为加法。因此,根据算术优先规则 (PEMDAS),在评估 OR 之前先评估 AND。

Example: 1 OR 0 is 1 + 0 = 1; 1 AND 0 is 1 * 0 = 0;

所以

X or X or X and X is grouped automatically as X or X or (X and X). 

使用括号可以避免混淆,并使代码更具可读性。

于 2013-01-11T16:23:40.933 回答