我得到这张表:
我在这里使用:
where FoodID=1
当我改变我的位置时:
where FoodID=1 and DayId=1 or DayId is null
所有行的归档日期值更改为null。
注意:
我使用特殊框架生成语句的地方:我编写此代码 在框架中:
@@wheresql or dayid is null
我不知道为什么在where中使用null时将值更改为null?
答案 0 :(得分:3)
您必须在或运营商周围使用()
:
where FoodID=1 and (DayId=1 or DayId is null)
如果不首先评估and
运算符,然后or
答案 1 :(得分:0)
where FoodID=1 and (DayId=1 or DayId is null)
答案 2 :(得分:0)
您必须小心处理围栏和逻辑运算符,因为它们具有优先级(AND优先于OR运算符),因此它们不相同:
where FoodID=1 and (DayId=1 or DayId is null)
和
where (FoodID=1 and DayId=1) or DayId is null
如果省略表达式中的fences,那么表达式采用第二种形状,因此必须明确定义表达式验证的逻辑顺序,它是:
where FoodID=1 and (DayId=1 or DayId is null)
答案 3 :(得分:0)
像这样使用ISNULL
:
where FoodID=1 and ISNULL(DayId,1) = 1
这可能会删除where
子句中的一个条件。
答案 4 :(得分:0)
这里的问题是运营商优先级。布尔and
优先于or
,因此FoodID=1 and DayId=1 or DayId is null
被解释为(FoodID=1 and DayId=1) or DayId is null
。由于您的表没有FoodID=1 and DayId=1
的任何行,因此只返回DayId is null
行。
如果要查询FoodID=1
和DayId
1
或null
的行,则需要明确使用括号:FoodID=1 and (DayId=1 or DayId is null)
< / p>