在使用时将Null设置为值在其中为null

时间:2015-03-10 07:22:57

标签: sql select

我得到这张表:

enter image description here

我在这里使用:

where FoodID=1

当我改变我的位置时:

where FoodID=1 and DayId=1 or DayId is null

所有行的归档日期值更改为null。

enter image description here

注意:

  

我使用特殊框架生成语句的地方:我编写此代码   在框架中:

@@wheresql or dayid is null

我不知道为什么在where中使用null时将值更改为null?

5 个答案:

答案 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=1DayId 1null的行,则需要明确使用括号:FoodID=1 and (DayId=1 or DayId is null) < / p>